Почему awk sub не заменяет мой ввод

Я изо всех сил пытался написать программу awk, которая будет принимать входные файлы и отображать исходное и разделенное пробелами имя файла только во втором столбце. Почему следующая команда не работает для этого?

echo -e "abc/123\ndef/456" | awk '{l=$1; sub("./*", "", l); print "mv " $1, $l}'

Для записи вышеприведенных выводов

mv abc/123 abc/123
mv def/456 def/456

1 ответ

Решение

l переменная, которая содержит замененный текст $l это значение номера столбца, на которое ссылается значение, хранящееся в переменной l, Поскольку l значение не начинается с цифры, awk рассматривает строку как число "0", так что вы получите $0 которая является текущей записью.

Вы хотите это вместо

print "mv", $1, l
Другие вопросы по тегам