[英]Bash array from CSV and awk
我正在尝试使用以下命令在 BASH 中创建一个数组:
# Normally a loop, but for this example, n=1
arr=( `awk 'NR == n' n=1 "$file" | tr ',' " "` );
echo ${arr[@]};
echo ${arr[2]};
$file
包含:
"1","test_id = \"5\"","test_id <> \"5\""
"2","test_id = \"6\"","test_id <> \"6\""
输出:
"1" "test_id = \"5\"" "test_id <> \"5\""
"test_id
我期望${arr[2]}
输出是test_id <> "5"
但我实际上得到了"test_id
。
但是,当我像这样手动输入数据时,我得到了正确的结果:
arr=( "1" "test_id = \"5\"" "test_id <> \"5\"" );
echo ${arr[@]};
echo ${arr[2]};
输出:
1 test_id = "5" test_id <> "5"
test_id <> "5"
任何帮助,将不胜感激,
谢谢。
正确答案当然在评论中:使用真正的 CSV 解析器。 话虽如此,这将是一种人为的解决方法:
. <(
echo "arr=(";
awk -F, 'NR==n && $1=$1' n=1 file
echo ")"
)
获取这个过程替换的结果微妙地改变了引用解释阶段发生的顺序。 它通常有助于解决这些复杂的问题。 啊,为了摆脱不必要的tr
调用,awk 被指示在逗号上拆分。 $1=$1
总是结果为真,并导致 awk 重新评估其行,因此输入字段分隔符更改为输出字段分隔符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.