Не могли бы вы попробовать следующее. Он будет работать только в первой строке, чтобы получить точное имя файла Input_file, и НЕ будет запускаться в каждой строке файла.
awk 'FNR==1{if(FILENAME~/\//){sub(/.*\//,"",FILENAME)}} {print $0,FILENAME}' Input_file
Возможные преимущества этого подхода:
1 - НЕ генерировать отредактированное имя файла в каждой строке, получение происходит в самой 1-й строке и просто печатается во всех других строках.
2 - НЕТ массива / заполнителя памяти, созданного, так что это также должно быть БЫСТРОМ для файла большого размера.
3- Так как я просто печатаю его, а не создаю дополнительный столбец со значениями его имени, что также экономит время при выполнении этого кода.
РЕДАКТИРОВАТЬ: Просто еще одна мысль, вы можете просто перейти к новому каталогу, где присутствует Input_file и может вернуться в сам код / один вкладыш, как пример, как показано ниже. ИМХО, я надеюсь, что это будет САМОЕ БЫСТРОЕ среди всех упомянутых здесь решений (так как мы НЕ делаем никаких манипуляций с данными здесь, и более того, мы используем ту же команду, которую вы использовали ранее :))
cd /cygdrive/c/dev/data/ && awk '{print $0,FILENAME}' input.txt && cd -
Особенность этой команды будет в том, что она вернется в исходную директорию, в которой вы запускаете код, так что вы никогда не почувствуете, что перемещались куда-либо:)