Bash 将awk输出回显到文件以删除重复项具有奇怪的输出

Bash 将awk输出回显到文件以删除重复项具有奇怪的输出,bash,shell,awk,sh,Bash,Shell,Awk,Sh,我制作了一个小的shell脚本,试图从文本文件中删除重复的条目(行)。当脚本运行并且文件有三行(全部相同)时,会出现奇怪的输出 shell脚本在Ubuntu发行版上运行 我的文本文件的内容: one one one 我正在运行以删除重复项的脚本: echo -e $(awk '!a[$0]++' /test/test.txt) > /test/test.txt awk用于删除重复项,而echo用于将其输出到文件 运行脚本时,我在文件中收到以下输出: one one 还应注意的是,第

我制作了一个小的shell脚本,试图从文本文件中删除重复的条目(行)。当脚本运行并且文件有三行(全部相同)时,会出现奇怪的输出

shell脚本在Ubuntu发行版上运行

我的文本文件的内容:

one
one
one
我正在运行以删除重复项的脚本:

echo -e $(awk '!a[$0]++' /test/test.txt) > /test/test.txt
awk用于删除重复项,而echo用于将其输出到文件

运行脚本时,我在文件中收到以下输出:

one
 one

还应注意的是,第二行后面还有一个新行,第二行开头有一个空格。

在读取文件的同时写入文件通常会导致灾难

如果您有GNU awk,则使用
-i inplace
选项:

$ cat text
one
one
one
$ gawk -i inplace '!a[$0]++' text
$ cat text
one
如果您有BSD awk,则使用:

awk '!a[$0]++' text >tmp && mv tmp text
或者,如果您安装了
海绵

awk '!a[$0]++' text | sponge text

海绵
在管道完成读取和处理之前不会更新文件。

在读取文件的同时写入文件通常会导致灾难

如果您有GNU awk,则使用
-i inplace
选项:

$ cat text
one
one
one
$ gawk -i inplace '!a[$0]++' text
$ cat text
one
如果您有BSD awk,则使用:

awk '!a[$0]++' text >tmp && mv tmp text
或者,如果您安装了
海绵

awk '!a[$0]++' text | sponge text

海绵
在管道完成读取和处理之前不会更新文件。

您只需要
awk'!只有[$0]+'/test/test.txt>/test/newtest.txt
。您不必
回显它。还要确保您的输入文件没有任何您只需要的
awk'!只有[$0]+'/test/test.txt>/test/newtest.txt
。您不必
回显它。还要确保您的输入文件没有任何