当字符串中包含管道符号|时,如何拆分字符串。 我想把它们分割成数组。

我试着

echo "12:23:11" | awk '{split($0,a,":"); print a[3] a[2] a[1]}'

这很好。如果我的字符串是像“12|23|11”,那么我如何把它们分割成一个数组?


当前回答

你有没有试过:

echo "12|23|11" | awk '{split($0,a,"|"); print a[3],a[2],a[1]}'

其他回答

你有没有试过:

echo "12|23|11" | awk '{split($0,a,"|"); print a[3],a[2],a[1]}'

请说得更具体些!你说“它不管用”是什么意思? 发布准确的输出(或错误消息),你的OS和awk版本:

% awk -F\| '{
  for (i = 0; ++i <= NF;)
    print i, $i
  }' <<<'12|23|11'
1 12
2 23
3 11

或者,使用split:

% awk '{
  n = split($0, t, "|")
  for (i = 0; ++i <= n;)
    print i, t[i]
  }' <<<'12|23|11'
1 12
2 23
3 11

编辑:在Solaris上,您需要使用POSIX awk (/usr/xpg4/bin/awk)才能正确处理4000个字段。

实际上awk有一个功能叫做“输入字段分隔符变量”链接。这是如何使用它。它不是一个真正的数组,但它使用内部的$变量。对于分割一个简单的字符串,它更容易。

echo "12|23|11" | awk 'BEGIN {FS="|";} { print $1, $2, $3 }'
echo "12|23|11" | awk '{split($0,a,"|"); print a[3] a[2] a[1]}'
awk -F'['|'] -v '{print $1"\t"$2"\t"$3}' file <<<'12|23|11'