awk 打印覆盖字符串

awk print overwrite strings

我在终端中使用 awk 时遇到问题。 我需要将一组中的许多文件从实际目录移动到另一个目录,并且我在文本文件中列出了必要的文件,如:

filename.txt

file1
file2
file3
...

我通常数字:

paste filename.txt | awk '{print "mv "" ../dir/"}' | sh

并执行:

mv file1 ../dir/
mv file2 ../dir/
mv file3 ../dir/

它通常有效,但现在命令改变了它的行为,awk 覆盖第一个字符串的最后一个字符串 ../dir/,从初始位置再次开始打印命令,获得:

../dire1 ../dir/
../dire2 ../dir/
../dire3 ../dir/

当然不能执行。 发生了什么事? 我该如何解决?

您的输入文件包含回车 returns(\r 又名 control-M)。 运行dos2unix就可以了运行一个UNIX工具就可以了。

虽然知道你在用 paste 做什么,但无论如何你根本不应该为此使用 awk,这只是一个简单的 shell 脚本的工作,例如测试完后删除 echo

$ < file xargs -n 1 -I {} echo mv "{}" "../dir"
mv file1 ../dir
mv file2 ../dir
mv file3 ../dir