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
Другие вопросы по тегам