【发布时间】:2018-07-25 21:25:03
【问题描述】:
我有一个包含 100k 行和大约 22 列的大文件。我想删除 第 15 列 中的内容仅出现一次的所有行。据我了解,它的反面是
sort -u file.txt
删除第 15 列中唯一的行后,我想再次打乱所有行,所以没有排序。为此,我会使用
shuf file.txt
生成的文件应仅包含至少有一个重复项(在第 15 列中)但顺序随机的行。
我试图解决 sort -u 但它只整理出唯一的行并丢弃我需要的实际重复项。但是,我不仅需要删除唯一的行,我还想保留重复的每一行,而不仅仅是重复的一个代表。
谢谢。
【问题讨论】:
-
Bash 没有内置的排序功能。
sort命令由您的操作系统提供,并且因系统而异。检查系统上的man sort以查看可用的选项。对于您的特定问题,请考虑使用更高级的工具,例如awk或perl来处理按“列”拆分内容等复杂性。 -
将您在第 15 列的唯一排序结果重定向到临时文件
grep -vf temp original以从原始文件中删除唯一行。检查您的sort是否支持--key=KEYDEF并创建一个KEYDEF以在第 15 列排序。 -
您可以使用
uniq -d获取已排序输入流中的所有重复值。