重击:删除唯一并保持重复

时间:2018-07-25 21:25:04

标签: bash sorting

我有一个大文件,有10万行,大约22列。我想删除第15列中的内容仅出现一次的所有行。据我了解,它与

相反
sort -u file.txt

在删除第15列中唯一的行之后,我想再次对所有行进行混洗,因此未进行任何排序。为此,我将使用

shuf file.txt

生成的文件应仅包含至少一个重复的行(在第15列中),但顺序随机。

我试图解决-u的问题,但它只会整理出唯一的行,并丢弃我需要的实际重复项。但是,我不仅需要删除唯一的行,而且还希望保留重复项的每一行,而不仅仅是重复项的一个代表。

谢谢。

1 个答案:

答案 0 :(得分:1)

使用uniq -d获取所有重复值的列表,然后过滤文件,以便仅包括这些行。

awk -F'\t' 'NR==FNR { dup[$0]; next; } 
     $15 in dup' <(awk -F'\t' '{print $15}' file.txt | sort | uniq -d) file.txt > newfile.txt

awk '{print $15}' file.txt | sort | uniq -d返回第15列中所有重复值的列表。

第一个NR==FNR脚本中的awk行将其转换为关联数组。

第二行处理file.txt并打印数组中第15列的所有行。