如何通过命令行提取按列仅出现一次的行
How to extract rows present only once by column via commandline
我有一个 space 分隔文件,如下所示:
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 ,,,}' | sed 's/_1//g; s/_2//g' | uniq -f 3 -u
任何人都可以建议一种最佳方法来处理一个巨大的文本文件 ~10Gb,使输出格式与所需输出格式中所示的输入格式相同吗?
您可以尝试使用 awk
完成所有操作,例如:
awk -F'_' '{ uniqs[] = [=10=]; count[]++ } END { for (uniq in uniqs) if ( count[uniq] == 1 ) print uniqs[uniq] }' file.txt
我有一个 space 分隔文件,如下所示:
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 ,,,}' | sed 's/_1//g; s/_2//g' | uniq -f 3 -u
任何人都可以建议一种最佳方法来处理一个巨大的文本文件 ~10Gb,使输出格式与所需输出格式中所示的输入格式相同吗?
您可以尝试使用 awk
完成所有操作,例如:
awk -F'_' '{ uniqs[] = [=10=]; count[]++ } END { for (uniq in uniqs) if ( count[uniq] == 1 ) print uniqs[uniq] }' file.txt