需要将制表符分隔文本拆分为linux中的多个变量

时间:2015-04-24 17:45:52

标签: linux shell awk

我需要在一行命令中将一行分成多个变量。 我需要将标签之间的每个字段提取到一个单独的变量中。例如:

000345AA6| |N|20150410|A & M FRNT 3/01/17|

我使用awk获取每个字段,然后使用eval将变量从awk导出到shell。由于最后一个字段(第5个)有空格,我收到错误。

代码:

z=`echo "000380105| |%|20150410|ABCAM PLC ADR |" | awk -F "|" '{print "SOURCE_FIELD2="$2;SOURCE_FIELD3=$3;print "SOURCE_FIELD4="$4;SOURCE_FIELD5=$5;}'`
eval "$z"
echo $SOURCE_FIELD4

实际输出:

test.ksh[12]: PLC:  not found

预期:

ABCAM PLC ADR

我在该行中有19个字段,并希望分配具有良好性能的变量。使用cut命令花费的时间太长,因为我需要为大约130k行执行此操作。

1 个答案:

答案 0 :(得分:2)

使用IFS=delim read -a array将字段读入数组,分割$IFS中的字符。

while IFS='|' read -r -a fields; do
    printf '[%s]\n' "${fields[@]}"

    echo "${fields[0]}"
    echo "${fields[1]}"
    ...
done < file.txt