【发布时间】:2015-04-05 01:53:46
【问题描述】:
我的数据格式如下:
1;string1
2;string2
...
n;stringn
第一列是 id-number,第二列是文本字符串。文本字符串可能包含数字、字母和字符,例如/.()?!。 ID 号等于行号。我试图找出这些文本字符串中的重复项。我希望得到这样的信息:
String of id 1 is duplicated on lines/ids 4,6,7
String of id 2 is duplicated on lines/ids 11,25
到目前为止,我已经使用 awk 命令完成了这项工作:
awk '/String of text/ {print FNR}' targetfile
并手动替换了我文件中每个文本字符串的搜索字符串。由于数据集现在更大,这变得不切实际。是否可以改进我的 Awk 命令,以便它可以自动测试文件中的每个文本字符串与其他字符串并输出到我正在寻找的信息?我虽然为此使用 for 循环,但不知道如何使其工作。
如果有更好的解决方案,我也可以使用除 Awk 之外的其他工具。我的系统是 Ubuntu 14.04。
【问题讨论】:
-
如果您可以在第二个字段上对文件进行排序,那么任务将变得几乎是微不足道的。
-
所以如果 string1 在第 4,6,7 行重复,这是否意味着当我们到达第 4 行时,我们需要说 string4 在第 1,6,7 行重复 在第 6 行我们需要说 字符串 6 在第 1,4,7 行重复 ?
-
@DmitriChubarov 所以,如果你这样做,文件将在第二个字段上排序...
awk -F';' '{print $2,$1}' OFS=';' file | sort
标签: linux bash ubuntu text awk