Должно быть grep -oE '[^ ]+$', вы хотите видеть вкладку здесь из-за поведения браузера, но в любом случае здесь учитываются и пространства вкладок, или, что еще лучше, вы можете это сделать,grep -oE '[^[:space:]]+$'
По сути, вы меняете строки файла, затем разделяете их, cutиспользуя пробел в качестве разделителя, берете первое поле, которое cutсоздает, а затем снова меняете токен, используете tr -dдля удаления ненужных символов и trснова для замены символов новой строки на,
Кроме того, вы можете избежать появления первого кота, выполнив:
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, значительно улучшило бы его долгосрочную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснение.
Ответы:
Пытаться
$ awk 'NF>1{print $NF}' file example. line. file.
Чтобы получить результат в одну строку, как в вашем примере, попробуйте:
{ sub(/\./, ",", $NF) str = str$NF } END { print str }
вывод:
Чистый баш:
$ while read line; do [ -z "$line" ] && continue ;echo ${line##* }; done < file example. line. file.
источник
$NF
»?##
или просто попробовать его в раковине.Вы можете легко сделать это с помощью grep:
grep -oE '[^ ]+$' file
(
-E
использовать расширенное регулярное выражение;-o
выводить только совпавший текст вместо полной строки)источник
grep -oE '[^ ]+$'
, вы хотите видеть вкладку здесь из-за поведения браузера, но в любом случае здесь учитываются и пространства вкладок, или, что еще лучше, вы можете это сделать,grep -oE '[^[:space:]]+$'
В awk можно сделать что-то вроде этого:
awk '{ print $NF }'
Изменить: чтобы избежать пустой строки:
awk 'NF{ print $NF }'
источник
Другой способ сделать это в обычном bash - использовать следующую
rev
команду:cat file | rev | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","
По сути, вы меняете строки файла, затем разделяете их,
cut
используя пробел в качестве разделителя, берете первое поле, котороеcut
создает, а затем снова меняете токен, используетеtr -d
для удаления ненужных символов иtr
снова для замены символов новой строки на,
Кроме того, вы можете избежать появления первого кота, выполнив:
rev < file | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","
источник
Есть много способов. как
awk
показывают решения, это чистое решениеРешение sed - удалить что-либо до последнего пробела. Так что, если в конце нет места, он должен работать
sed 's/.* //g' <file>
вы также можете избежать
sed
и пойти наwhile
петлю.while read line do [ -z "$line" ] && continue ; echo $line|rev|cut -f1 -d' '|rev done < file
он читает строку, уважает ее, отсекает первую (т.е. последнюю в оригинале) и восстанавливает обратно
то же самое можно сделать в чистом виде
while read line do [ -z "$line" ] && continue ; echo ${line##* } done < file
это называется расширением параметров
источник
tldr;
$ awk '{print $NF}' file.txt | paste -sd, | sed 's/,/, /g'
Для такого файла
данная команда напечатает
Как это устроено:
awk '{print $NF}'
: печатает последнее поле каждой строкиpaste -sd,
: читаетstdin
последовательно (по-s
одному файлу за раз) и записывает поля с разделителями-запятыми (-d,
)sed 's/,/, /g'
:s
ubstitutes","
с", "
g
лобалли (для всех экземпляров)Рекомендации:
источник