使用列作为参数过滤文件中的重复项 (grep linux)

Filter duplicates in file by using columns as parameters (grep linux)

我正在一组文件中寻找模式 #type。作为输出,我应该 return 包含该模式的行。这些行被组织为带有制表符分隔符的列:

<subject1> <#type> <object1>
<subject2> <#type> <object1>
<subject3> <#type> <object2>
<subject4> <#type> <object2>
<subject5> <#type> <object3>

为此,我使用命令 ack-grep:

$ack-grep "#type"

我也可以使用 sed 作为:

sed -n -e "/#type/p;q" *.nt

问题是我应该避免的重复项是 objects。作为输出我应该有:

 <subject1> <#type> <object1>
 <subject3> <#type> <object2>
 <subject5> <#type> <object3>

你为什么不简单地使用旧的 grep?基本上应该是:

grep '#type' *.nt

为了避免 objectN 部分出现重复,您可以将 uniq 与 --skip-fields 选项一起使用:

grep '#type' *.nt | sort -k3,3 | uniq --skip-fields 2

但是,在使用 uniq 之前需要对输出进行排序。