我需要在一行命令中将一行分成多个变量。 我需要将标签之间的每个字段提取到一个单独的变量中。例如:
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行执行此操作。
答案 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