Например, у меня есть файл:
$ cat file
i am the first example.
i am the second line.
i do a question about a file.
и мне нужно:
example, line, file
Я намерен использовать "awk", но проблема в том, что слова находятся в другом пространстве
Например, у меня есть файл:
$ cat file
i am the first example.
i am the second line.
i do a question about a file.
и мне нужно:
example, line, file
Я намерен использовать "awk", но проблема в том, что слова находятся в другом пространстве
Try
$ awk 'NF>1{print $NF}' file
example.
line.
file.
Чтобы получить результат в одной строке, как в вашем примере, попробуйте:
{
    sub(/\./, ",", $NF)
    str = str$NF
}
END { print str }
выход:
$ awk -f script.awk file
example, line, file, 
Pure bash:
$ while read line; do [ -z "$line" ] && continue ;echo ${line##* }; done < file
example.
line.
file.
		Вы можете сделать это легко с помощью grep:
grep -oE '[^ ]+$' file
(-E используйте расширенное регулярное выражение; -o выводит только согласованный текст вместо полной строки)
Вы можете сделать что-то подобное в 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
он читает строку, почитает ее, режет первый (то есть последний в оригинале) и восстанавливает назад
то же самое можно сделать чистым способом bash
while read line
do [ -z "$line" ] && continue ;
echo ${line##* }
done < file
он называется расширением параметра
TL;DR;
$ awk '{print $NF}' file.txt | paste -sd, | sed 's/,/, /g'
Для файла, подобного этому
$ cat file.txt
The quick brown fox
jumps over
the lazy dog.
данная команда будет печатать
fox, over, dog.
Как это работает:
awk '{print $NF}': печатает последнее поле каждой строкиpaste -sd,: читает stdin серийно (-s, по одному файлу за раз) и записывает поля с разделителями-запятыми (-d,)sed 's/,/, /g': s ubstitutes "," с ", " g lobally (для всех экземпляров)Литература: