2016-10-06 99 views
0

我在终端中使用awk时出现问题。 我需要一组从实际的目录中移动多个文件到另外一个和我有一个文本文件所需的文件列表,如:awk print覆盖字符串

FILENAME.TXT

file1 
file2 
file3 
... 

我通常位:

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

,并执行:

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

它通常工作,但现在的命令改变其行为和awk覆盖在第一个最后一个字符串../dir/,从初始位置再次启动打印命令,获取:

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

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

回答

2

您的输入文件包含回车符(\r又名control-M)。在其上运行一个UNIX工具之前,运行dos2unix

idk你在使用什么粘贴,而且你不应该使用awk来完成这个任务,它只是一个简单的shell脚本的工作。删除echo一旦你测试过这一点:

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

您可以修改您的awk程序通过在程序的开头添加sub(/\r/,"")删除\r

$ awk '{sub(/\r/,""); print "mv "$1" ../dir/"}' filename.txt 
mv file1 ../dir/ 
mv file2 ../dir/ 
mv file3 ../dir/