当字符串中包含管道符号|时,如何拆分字符串。 我想把它们分割成数组。
我试着
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]}'
这很好。如果我的字符串是像“12|23|11”,那么我如何把它们分割成一个数组?
当前回答
笑话?:)
如何回应“12 | | 23日11”| awk的{分裂(0美元,“|”);打印一个[3]a[2] a[1]}'
这是我的输出:
p2> echo "12|23|11" | awk '{split($0,a,"|"); print a[3] a[2] a[1]}'
112312
所以我想它还是有用的。
其他回答
笑话?:)
如何回应“12 | | 23日11”| awk的{分裂(0美元,“|”);打印一个[3]a[2] a[1]}'
这是我的输出:
p2> echo "12|23|11" | awk '{split($0,a,"|"); print a[3] a[2] a[1]}'
112312
所以我想它还是有用的。
实际上awk有一个功能叫做“输入字段分隔符变量”链接。这是如何使用它。它不是一个真正的数组,但它使用内部的$变量。对于分割一个简单的字符串,它更容易。
echo "12|23|11" | awk 'BEGIN {FS="|";} { print $1, $2, $3 }'
我知道这是个老问题,但我想也许有人喜欢我的把戏。特别是因为这个解决方案不局限于特定数量的项目。
# Convert to an array
_ITEMS=($(echo "12|23|11" | tr '|' '\n'))
# Output array items
for _ITEM in "${_ITEMS[@]}"; do
echo "Item: ${_ITEM}"
done
输出将是:
Item: 12
Item: 23
Item: 11
code
awk -F"|" '{split($0,a); print a[1],a[2],a[3]}' <<< '12|23|11'
输出
12 23 11
我不喜欢回声“…”| awk…解决方案,因为它调用不必要的fork和execsystem调用。
我更喜欢迪米特里的解决方案
awk -F\| '{print $3 $2 $1}' <<<'12|23|11'
或者更短一点的版本:
awk -F\| '$0=$3 $2 $1' <<<'12|23|11'
在这种情况下,输出记录放在一起是一个真条件,所以它被打印出来。
在这个特定的情况下,stdin重定向可以通过设置一个awk内部变量来避免:
awk -v T='12|23|11' 'BEGIN{split(T,a,"|");print a[3] a[2] a[1]}'
我使用ksh相当长一段时间,但在bash中,这可以通过内部字符串操作来管理。在第一种情况下,原始字符串被内部终止符分割。在第二种情况下,假设字符串总是包含由一个字符分隔符分隔的数字对。
T='12|23|11';echo -n ${T##*|};T=${T%|*};echo ${T#*|}${T%|*}
T='12|23|11';echo ${T:6}${T:3:2}${T:0:2}
所有情况下的结果都是
112312