我有一个包含8列的文件。我在这里只显示了col1,col2,col3,col7
a FRNUMBER001 ID1 abcdefgh
a FRNUMBER001 ID2 abcdefg
b FRNUMBER003 ID3 lmnopqrs
e FRNUMBER006 ID7 ablmohuijk
b FRNUMBER003 ID9 lmnopqrstuvw
如果col1相同且col7是较长字符串的子集,我想要折叠匹配的col1并将其视为一个实体。
输出:
a FRNUMBER001 ID1 abcdefgh
b FRNUMBER003 ID9 lmnopqrstuvw
e FRNUMBER006 ID7 ablmohuijk
在awk中这会更容易吗?如果使用cnt[$1]++
它是相同的,我可以在awk中获取计数器集以添加下一行但我的问题是如何处理awk中的子集场景,比如用什么语法来表示子集?请问任何想法?
答案 0 :(得分:0)
你可以使用awk
中的索引函数来做到这一点cat ip.txt | awk '{if(index($4,$1)>0)printf("%s\n",$0);}'
但我对你的意见表示怀疑。正如你所说col1可以等于col7或col7的一个子集,然后输入你的输出应该是以下
a FRNUMBER001 ID1 abcdefgh
a FRNUMBER001 ID2 abcdefg
请纠正我的理解
答案 1 :(得分:0)
您可以尝试以下内容:
$ cat file
a FRNUMBER001 ID1 abcdefgh
a FRNUMBER001 ID2 abcdefg
b FRNUMBER003 ID3 lmnopqrs
e FRNUMBER006 ID7 ablmohuijk
b FRNUMBER003 ID9 lmnopqrstuvw
$ awk 'a[$1]{b[$1]=index($4,a[$1])>0?$0:b[$1];next}{a[$1]=$4;b[$1]=$0}END{for(x in b) print b[x]}' file
e FRNUMBER006 ID7 ablmohuijk
a FRNUMBER001 ID1 abcdefgh
b FRNUMBER003 ID9 lmnopqrstuvw
如果需要排序,您可以将输出传递给sort
。您必须将$4
引用更改为$7
,因为您提到它是您希望与之比较的第7列。