awk print перезаписать строки
У меня проблема с использованием awk в терминале. Мне нужно переместить много файлов в группе из фактического каталога в другой, и у меня есть список необходимых файлов в текстовом файле, как:
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/
и, конечно, это не может быть выполнено. Что произошло? Как мне это решить?
1 ответ
Ваш входной файл содержит возврат каретки (\r
ака control-M
). Бежать dos2unix
на нем, прежде чем запускать на нем инструмент UNIX.
Идентифицируйте то, для чего вы используете вставку, и вам все равно не следует использовать awk для этого, это просто работа для простого сценария оболочки, например, удалить echo
как только вы проверили это:
$ < file xargs -n 1 -I {} echo mv "{}" "../dir"
mv file1 ../dir
mv file2 ../dir
mv file3 ../dir