在整个文件中查找特定单词(在本例中为数字),对其进行排序,如果只出现一次则将其删除。
输入:
1. I love my country 1234
2. I love Newyork 5678
3. I love my city 1234
4. I love my pet 1111
5. I love my dog 2222
6. I love my cat 1111
7. I love my cat 5555
输出:
1. I love my country 1234
2. I love my city 1234
3. I love my pet 1111
4. I love my cat 1111
尝试过:sort -u
没有给出正确的结果。
答案1
尝试:
awk '{c[$NF+0]++; a[NR]=$NF+0; b[NR]=$0} END{for(i=1;i<=NR;i++)if(c[a[i]]>1)print b[i]}' file
使用您的输入文件:
$ cat file
I love my country 1234
I love Newyork 5678
I love my city 1234
I love my pet 1111
I love my dog 2222
I love my cat 1111
I love my cat 5555
上述命令产生:
$ awk '{c[$NF+0]++; a[NR]=$NF+0; b[NR]=$0} END{for(i=1;i<=NR;i++)if(c[a[i]]>1)print b[i]}' file
I love my country 1234
I love my city 1234
I love my pet 1111
I love my cat 1111
多行版本
对于那些喜欢将命令分散在多行中的人:
awk '
{
c[$NF+0]++
a[NR]=$NF+0
b[NR]=$0
}
END{
for(i=1; i<=NR; i++)
if (c[a[i]]>1)
print b[i]
}
' file
现在可以了
c[$NF+0]++
该数组
c
现在多次跟踪文件中每行最后一个字段中出现的数字。a[NR]=$NF+0
数组
a
在行号键 下存储行最后一个字段中的数字NR
。b[NR]=$0
对于行号
NR
,数组b
存储该行。END{for(i=1;i<=NR;i++)if(c[a[i]]>1)print b[i]}
到达文件末尾后,它会再次循环遍历每一行,如果
c
该行中的数字计数(由 给出a
)大于 1,则打印该行。