2011-03-10 60 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