【发布时间】:2021-03-27 14:46:19
【问题描述】:
我有以下名为 test.csv
的 CSV 文件First Line, 100
Second Line, 200
Third Line, 300
Fourth Line, 400
我想用逗号分隔每一行,并使用 awk 将第一部分存储到 bash 脚本中的数组中。 我做了以下事情:
#!/bin/bash
declare -a MY_ARRAY
MY_ARRAY=$(awk -F ',' '{print $1}' test.csv)
echo 'Start'
for ENTRY in ${MY_ARRAY}
do
echo ${ENTRY}
done
echo 'Stop'
输出如下:
Start
First
Line
Second
Line
Third
Line
Fourth
Line
Stop
如何让数组保存以下内容?:
First Line
Second Line
Third Line
Fourth Line
【问题讨论】:
-
为什么要使用
awk来填充bash 数组?在任何情况下,直接使用 bash 会更容易。由于字段内的空格,无论如何您需要比array=( $(awk ...) )更多的bash 代码(注意$( )` 周围的( );你忘记了它们)。 -
当前代码的一些问题:a) 为数组赋值通常需要将赋值的右侧包装在父母中,例如,
MY_ARRAY=( $(awk ... ) ); b) 因为awk输出行包含空格,您需要将默认字段分隔符重新定义为\n,以便正确解析到数组中,例如IFS=$'\n' MY_ARRAY=( $(awk ... ) )(全部在一行,所以IFS重定义仅适用于该命令); c) 要引用数组的各个元素,您需要一个通配符匹配索引(包装在[]'s中),例如for ENTRY in "${MY_ARRAY[@]}"