2011-03-10 56 views
3

我有一個包含這種格式的多行的文件:解析字符串bash腳本來獲得最後一個項目

Item A    62.7   97.9    9.0 
Item A B C   54.2   98.4    10.0 
Another Item A  51.0   98.8    7.0 
Another Item A--B--C 57.0   98.8    1.0 

我想編寫一個bash腳本,將採取每行的所有的最後的值(例如9.0,10.0,7.0和1.0)。

我遇到的問題是我不能使用cut -d" " -f 4,因爲項目名稱中有不同數量的空格。此外,使用sed時,我不能使用'多於2個空格'作爲分隔符,因爲有時在項目名稱和第二列之間只會有一個空格(例如在示例的最後一行,C和5之間)。

我想也許我可以從最後解析每一行,但我不確定這是否可行。任何幫助將不勝感激,因爲我不是很熟悉bash腳本。

謝謝

回答

2

從最後解析行將是一個很好的方法在這裏。你可以使用sed -e 's/^.* //'

3

如果你不介意在最後一個逗號,你可以這樣做:如果你希望得到的最後一個項目以分隔

awk '{$1=$1;print $NF}' ORS="," ./infile 
+0

謝謝你的回答,這個效果同樣好。 – quarkdown27 2011-03-10 17:27:31

+0

@quark:我很好奇你選擇的工作是如何滿足你的要求,他們應該用逗號分開?如果這不是要求,那麼請從您的問題中刪除該陳述,因爲這會讓其他人感到困惑。謝謝 – SiegeX 2011-03-10 17:29:17

+0

我可以毫不費力地添加逗號,而且我比awk更熟悉sed。但正如我所說,這兩個答案對我來說都是同樣好的答案(兩者都+1,但不幸的是我只能選擇一個作爲答案)。我會從我的問題中拿出逗號聲明來更好地回答問題。 :) – quarkdown27 2011-03-10 17:39:34

1

,可以隨時逆轉第一項是反轉分隔列表。

echo ($LINE) | rev | cut -d" " -f1 | rev