我有一个大文件,有10万行,大约22列。我想删除第15列中的内容仅出现一次的所有行。据我了解,它与
相反sort -u file.txt
在删除第15列中唯一的行之后,我想再次对所有行进行混洗,因此未进行任何排序。为此,我将使用
shuf file.txt
生成的文件应仅包含至少一个重复的行(在第15列中),但顺序随机。
我试图解决-u的问题,但它只会整理出唯一的行,并丢弃我需要的实际重复项。但是,我不仅需要删除唯一的行,而且还希望保留重复项的每一行,而不仅仅是重复项的一个代表。
谢谢。
答案 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列的所有行。