我有一组数据作为输入,需要基于deleimiter的倒数第二个字段.这些行可能具有不同数量的分隔符.我怎样才能获得倒数第二场?
示例输入
text,blah,blaah,foo
this,is,another,text,line
Run Code Online (Sandbox Code Playgroud)
预期产出
blaah
text
Run Code Online (Sandbox Code Playgroud)
Arc*_*ain 81
从除了最后两个令牌之外的Unix cut中得到一个提示并能够找到答案:
cat datafile | rev | cut -d '/' -f 2 | rev
Run Code Online (Sandbox Code Playgroud)
Chr*_*our 41
Awk很适合这个:
awk -F, '{print $(NF-1)}' file
Run Code Online (Sandbox Code Playgroud)
变量NF是一个特殊的awk变量,它包含当前记录中的字段数.
这里根本不需要使用cut
,rev
或任何其他外部工具.只需将每行读入一个数组,然后选择你想要的那一行:
while IFS=, read -r -a entries; do
printf '%s\n' "${entries[${#entries[@]} - 2]}"
done <file
Run Code Online (Sandbox Code Playgroud)
在纯bash中执行此操作远比启动管道快,至少对于相当小的输入.对于大输入,更好的工具是awk.