2016-10-06 8 views
0

У меня проблема с использованием awk в терминале. мне нужно переместить много файлов в группе из текущего каталога к другому, и у меня есть список необходимых файлов в текстовом файле, как:awk print overwrite строки

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 aka control-M). Запустите файл dos2unix, прежде чем запускать на нем инструмент UNIX.

idk, что вы используете для вставки, хотя и вы не должны использовать awk для этого вообще, это просто работа для простого сценария оболочки, например. удалить echo, как только вы проверили это:

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

Вы можете изменить вашу AWK программу для удаления \r путем добавления sub(/\r/,"") в начале программы:

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

 Смежные вопросы

  • Нет связанных вопросов^_^