如何通过命令行

时间:2017-08-07 12:59:06

标签: terminal uniq

我有一个空格分隔的文件,如下所示:

D2ABMACXX:5:1101:10000:93632_1:N:0 c111 12462 6
D2ABMACXX:5:1101:10004:54586_1:N:0 c6753 3473 1
D2ABMACXX:5:1101:10004:54586_2:N:0 c7000 5726 1
D2ABMACXX:5:1101:10006:56411_1:N:0 c4282 877 42
D2ABMACXX:5:1101:10006:56411_2:N:0 c5703 240 6
D2ABMACXX:5:1101:10013:29259_2:N:0 c6008 384 11

我需要根据" _"之前的文本提取仅出现一次的行。在第1列中。示例输出应如下所示:

##required output format###
D2ABMACXX:5:1101:10000:93632_1:N:0 c111 12462 6
D2ABMACXX:5:1101:10013:29259_2:N:0 c6008 384 11

我有一种复杂的方法,但却丢失了原始信息:

cat file.txt | awk '{print $2,$3,$4,$1}' | sed 's/_1//g; s/_2//g' | uniq -f 3 -u

有没有人可以建议在一个巨大的文本文件上做到这一点的最佳方式~10Gb以与输入格式相同的格式获得输出,如所需的输出格式所示?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用awk执行所有操作,例如:

awk -F'_' '{ uniqs[$1] = $0; count[$1]++ } END { for (uniq in uniqs) if ( count[uniq] == 1 ) print uniqs[uniq] }' file.txt