删除具有单个公共字段的行

删除具有单个公共字段的行

我有一个制表符分隔的文件,如下所示:

123   some text
123   some different text
334   some other text
341   more text

我想做两件事。一种是按数字对所有内容进行排序(这很容易做到),另一种是如果数字已经存在则删除一行。即输出将如下所示:

123   some text
334   some other text
341   more text

我尝试获取一个仅包含唯一数字的文件,即

123
334
341

并将其与原始文件连接起来:

join -j 1 justNumbers.txt original.txt

但这给了我原始文件。有任何想法吗?

答案1

如果您想排序/测试唯一性第一的具体来说,并且您的系统有 GNUcoreutils版本sort,那么我认为您可以使用

sort -nu file

即。

$ sort -nu file
123   some text
334   some other text
341   more text


info coreutils 'sort invocation'

命令sort -usort | uniq是等效的,但这种等效性并不扩展到任意sort选项。 例如,sort -n -u在检查唯一性时仅检查初始数字字符串的值,而sort -n | uniq 检查整条生产线。

答案2

尝试这个awk

awk '!($1 in a){a[$1];print}' file
123   some text
334   some other text
341   more text

这假设文件已排序。

相关内容