Linux下如何提取仅出现一次的行并保留原始排序?
保留原始顺序筛选仅出现一次的行
文件内容
2 1 4 3 2 1
需求
输出仅出现一次且保留原始顺序的行,期望输出:
4 3
之前的尝试问题
- 使用
sort file.txt | uniq -u:能筛选出仅出现一次的行,但结果会被排序,实际输出:
3 4
- 使用
awk '!x[$0]++' file.txt:能保留原始顺序,但输出的是所有去重后的行,实际输出:
2 1 4 3
解决方案
可以通过两次遍历文件的awk命令实现需求:
awk 'NR==FNR{count[$0]++; next} count[$0]==1' file.txt file.txt
命令解释
- 第一次遍历(
NR==FNR):统计每行内容的出现次数,将计数存入数组count - 第二次遍历:检查当前行的计数是否为1,若是则打印该行,这样就能严格按照原始文件的顺序输出仅出现一次的内容。
执行该命令后,输出结果与期望一致:
4 3
内容的提问来源于stack exchange,提问作者Syed Ahmed Jamil
相关产品推荐
相关产品推荐

