Unix解析管道分隔格式字符串在ksh中

时间:2012-04-18 10:54:19

标签: string parsing shell unix ksh

我正在编写ksh脚本来解析管道分隔的字符串

export dummy="abc"  
echo "123|456|789" | awk '{split($0,output,"|"); print output[3] output[2] output[1]}'

上面的代码似乎有效,但我无法将输出值[3]分配给虚拟。

有没有办法进行这样的解析,但我想将解析结果分配给ksh空间中的变量,即dummy(在上面的示例中)?

2 个答案:

答案 0 :(得分:6)

shell可以这样做:

line="123|456|789"
IFS='|' read a b c <<END
$line
END
echo $c  # => 789

答案 1 :(得分:3)

您无法将awk变量(即output[3])分配给shell变量(即dummy),您只能将awk的输出分配给变量,例如

export dummy=`echo "123|456|789" | awk -F'|' '{ print $3; }'`

然而,awk在这里有点矫枉过正,cut也会起作用:

export dummy=`echo "123|456|789" | cut -d'|' -f3`
相关问题