Unix Shell脚本:从行忽略空白行中删除重复项

时间:2014-05-22 03:13:23

标签: bash shell unix awk sh

如何在忽略空白行的同时从txt文件中“删除”重复的行?而不是删除我想在行中添加//(注释)的前缀。

我从搜索中发现此命令awk ' !x[$0]++'将删除文件中的所有重复行以及空行。如果可能的话,修改awk命令会很棒。

原始输入:

foo
bar
cat

dog
turtle
cat
bar
lion
bear

bird
fish
cat

输出:

foo
bar
cat

dog
turtle
// cat
// bar
lion
bear

bird
// lion
bird

只需要忽略空白换行符和

1 个答案:

答案 0 :(得分:8)

以下是使用awk的一种方式:

$ awk 'NF{x[$0]++; print (x[$0]>1?"//"$0:$0); next}1' file
foo
bar
cat

dog
turtle
//cat
//bar
lion
bear

bird
fish
//cat

NF告诉awk仅对非空行执行操作。我们将存储每一行​​的数组x增加为关键字。如果计数大于1,我们打印带//前缀的行,否则我们只按原样打印该行。 1允许我们保留空白行。