[英]How do I get the last word in each line with bash
例如我有一個文件:
$ cat file
i am the first example.
i am the second line.
i do a question about a file.
我需要:
example, line, file
我打算用“awk”,但問題是這些詞在不同的空間
嘗試
$ 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,
純重擊:
$ 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" ","
tldr;
$ 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
g
替換","
與", "
全局(適用於所有實例)參考:
有很多方法。 正如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
稱為參數擴展
如果你想為最后一個詞啟動一個 perl 單行:
perl -lane 'print "$F[-1]"'
...其中-a
將自動拆分為@F
而$F[-1]
是最后一個元素。
用逗號變成列表:
perl -ane 'print "$F[-1]" . (eof() ? "\n":",")'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.