簡體   English   中英

如何使用 bash 獲取每行中的最后一個單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM