Вопрос:
Я хочу извлечь последнее слово файла, скажем a.txt в bash/sed/awk.
Как я могу это сделать?
Лучший ответ:
Чтобы получить последнее слово в последней строке:
awk ‘END {print $NF}’ file Ответ №1
Обновление.
Если вы хотите использовать awk и убедитесь, что есть слово, используйте это:
tac a.txt | awk ‘NF{print $NF; exit}’
tac печатает файл в обратном порядке. NF перед блоком {} делает работу, когда строка не пуста. В этом случае он печатает последнее поле (NF обозначает количество полей, поэтому $NF является последним), а затем завершается.
Test
$ cat a hello my name is blabla and this is my comment. <— note an empty line $ tac a | awk ‘NF{print $NF; exit}’ comment.
Или также, как предложенный Kent:
awk ‘{w=NF?$NF:w} END{print w}’ file
w=$NF?$NF:w. Это тернарный оператор: если NF>0 (нет пустой строки), установите w в последнее поле. В противном случае держите его так, как было. Наконец, в END{} напечатайте последнее сохраненное слово.
Если вы хотите сделать это с помощью sed, вы можете использовать это, что работает, если в конце нет пустых строк:
sed -n ‘${s/.* //; p}’ a.txt
Объяснение
- $ обозначает последнюю строку файла. В этом случае сделайте то, что находится внутри {}.
- s/.* //; p удалить все до последнего пробела. Затем напечатайте p.
Ответ №2
Попробуйте также эту команду awk,
awk -v RS=»