我制作了一个小的shell脚本,试图从文本文件中删除重复的条目(行)。当脚本运行并且文件有三行(全部相同)时,会发生奇怪的输出。
shell脚本在Ubuntu发行版上运行。
我的文字内容:
one
one
one
我正在运行的脚本删除重复项:
echo -e $(awk '!a[$0]++' /test/test.txt) > /test/test.txt
awk 旨在删除重复项,而 echo 旨在将其输出到文件中。
运行我的脚本后,我在文件中收到以下输出:
one
one
还应该注意,第二行后面还有一个换行符,第二行开头有一个空格。
答案 0 :(得分:0)
在您阅读文件的同时写入文件通常会导致灾难。
如果您有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
或者,如果您安装了sponge
:
awk '!a[$0]++' text | sponge text
sponge
在管道完成读取和处理之前不会更新文件。