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
我在终端中使用 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