我需要根据第一列(表示chr:position)上的值,对大表(以空格分隔)中的重复条目进行排序和删除。
初始数据如下:
1:10020 rs775809821
1:10039 rs978760828
1:10043 rs1008829651
1:10051 rs1052373574
1:10051 rs1326880612
1:10055 rs892501864
输出应如下所示:
1:10020 rs775809821
1:10039 rs978760828
1:10043 rs1008829651
1:10051 rs1052373574
1:10055 rs892501864
我尝试遵循this post及其变体,但是改编后的代码不起作用:
sort -t' ' -u -k1,1 -k2,2 input > output
结果:
1:10020 rs775809821
有人可以建议吗? 谢谢!
答案 0 :(得分:1)
使用awk
时非常容易。将文件分割为空格或:
作为字段分隔符,并按冒号后的单词将行分组
awk -F'[: ]' '!unique[$2]++' file
-F[: ]
定义了字段分隔符,用于分割行上的各个单词,而部分!unique[$2]++
根据$2
的值创建一个哈希表映射。每当在$2
中看到一个值时,我们都会增加该值,以便在下一次迭代时,该行上的否定条件!
将阻止该行再次打印。
并非所有-F
版本都支持使用awk
标志定义正则表达式。以符合POSIX的方式,您可以
awk '{ split($0,a,"[: ]"); val=a[2]; } !unique[val]++ ' file
上面的部分假定您要基于:
之后的单词来唯一化文件,但要完全基于第一列,只需 即可
awk '!unique[$1]++' file
答案 1 :(得分:0)
由于您的输入数据非常简单,因此该命令将非常简单。
sort file.txt | uniq -w7
这只是对文件进行排序,并使用前7个字符进行唯一处理。如果命令中有使用-i的步骤,则前7个字符的数据为数字。