如何在管道多行时删除单行中的重复单词

时间:2017-10-10 20:40:01

标签: linux bash unix awk xargs

现在,我通过命令xargs -n1 | sort -u | xargs(我在这里找到Sorting and removing duplicate words in a line)来管道一些线。

但是,我的问题是,当管道多行时,它会将所有行放在一起。我该如何通过:

My first example line for example
My second example line for example
My third example line for example

得到:

My first example line for
My second example line for
My third example line for

由于我在此之前运行了很多管道,并且它将在一个循环中运行,所以如果你知道任何简单的解决方案而不创建新的循环并逐行阅读,我更愿意。我只是希望它一次只能工作一行,所以我可以把它直接放到循环中。谢谢你的考虑。

2 个答案:

答案 0 :(得分:1)

$ awk '{delete seen; c=0; for (i=1;i<=NF;i++) if (!seen[$i]++) printf "%s%s", (++c>1?OFS:""), $i; print ""}' file
My first example line for
My second example line for
My third example line for

答案 1 :(得分:0)

更简单的awk程序,但不保留订单(管道没有这样做,所以我假设不是你的要求):

$ awk '{delete a; for(i=1;i<=NF;i++) a[$i]; for(w in a) printf w" ";print ""}' lines 
first line My for example 
line My for second example 
line My third for example