Извлечь последнее слово файла в bash/sed/awk

Вопрос:Я хочу извлечь последнее слово файла, скажем a.txt в bash/sed/awk. Как я могу это сделать? Лучший ответ: Чтобы получить последнее слово в последней строке: awk 'END {print $NF}' file Ответ №1Обновление. Если вы хотите использовать awk и убедитесь, что есть слово, используйте это: tac a.txt | awk 'NF{print $NF; exit}' tac печатает файл в обратном

Вопрос:

Я хочу извлечь последнее слово файла, скажем 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=»» ‘{print $NF}’ file

RS=»» превращает все записи в файл в одну одиночную запись. И затем {print $NF} печатает последнее поле этой единственной записи.

Ответ №3

Вы также можете использовать команду sed,

$sed -nr ‘${s/.* (.*)$/1/pg}’ File_name Ответ №4

Использование tail и grep:

tail -1 myFile.txt | grep -oE ‘[^ ]+$’ Ответ №5

Вы также можете получить последнее слово с grep и tail:

<a.txt grep -o ‘w+’ | tail -n1 Ответ №6

sed вариант для поддержки пустой последней строки (если есть):

sed -n ‘/[^ ]/h; ${g;s/ *$//; s/.* //p}’ a.txt Ответ №7

Это может сработать для вас (GNU sed):

sed -r ‘/w/{s/.*W(w+)W*$/1/;h};$!d;x;/./!d’ file

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

Альтернативный способ состоит в том, чтобы вырезать весь файл в память:

sed -r ‘:a;$!{N;ba};s/.*W(w+)W*$/1/p;d’ file Ответ №8 sed -n ‘/^$/!{$ s/.* (w*)$/1/p}’

Это опускает пустые строки и печатает последнее слово на последней непустой строке.

  • /^ $/! найти непустые строки
  • $s/на последней строке подставить
  • . * ( w *) $захватывает что-либо между()
  • 1 строка подстановки для группы захвата()
  • p распечатать его
Оцените статью
Добавить комментарий