2016-10-06 36 views
0

端末でawkを使用する際に問題があります。私は通常の桁awkの印刷文字列を上書きする

file1 
file2 
file3 
... 

ファイル名.txt

:として、私は別のものに実際のディレクトリからグループ内の多くのファイルを移動する必要があると私は、テキストファイルに必要なファイルのリストを持っている :

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

、それが実行されます。

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

それは通常動作しますが、しかし、今のコマンドは、その動作を変更し、awkは取得、初期位置から再びプリントコマンドを開始、最初の1で最後の文字列../dir/を上書き:

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

をし、もちろん、それを実行することができません。 何が起こったのですか? どうすれば解決できますか?

答えて

2

入力ファイルには、キャリッジリターン(\r別名control-M)が含まれています。 UNIXツールを実行する前にdos2unixを実行してください。

idk何を使っているのですか?とにかくawkを使ってはいけません。これは単純なシェルスクリプトの仕事です。

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

あなたがプログラムの先頭でsub(/\r/,"")を追加することにより、\rを削除するためにawkプログラムを変更することができます:あなたはこれをテストしたらechoを削除

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