我目前正在使用bash脚本。我有一个csv文件,其中的每一行都如下所示:
1,ABC DEF
2,GHI JKL
我想创建一个仅在第二个字段中包含值的数组,然后打印它们。
我当前的解决方法如下:
myarr=($(awk -F, '{print $2}' filename.csv))
for i in "${myarr[@]}"
do
echo $i
done
我的输出如下:
ABC
DEF
GHI
JKL
当我需要它看起来像这样时:
ABC DEF
GHI JKL
我需要将结果保存在变量中以供将来操作!
我该如何解决这个问题?
答案 0 :(得分:4)
如果要在shell数组中使用值,请不要使用awk
。只需使用这样的循环:
arr=()
while IFS=, read _ val; do
arr+=("$val")
done < file
# check array content
declare -p arr
declare -a arr='([0]="ABC DEF" [1]="GHI JKL")'
# loop through array
for i in "${arr[@]}"; do
echo "$i"
# or do whatever with individual element of the array
done
答案 1 :(得分:3)
mapfile -t myarr < <(awk -F, '{print $2}' filename.csv)
declare -p myarr
输出:
declare -a array='([0]="ABC DEF" [1]="GHI JKL")'
请参阅:help mapfile
,help declare
答案 2 :(得分:2)
您还可以简单地将整行读取到数组中,然后 剥离第一个字段。
mapfile -t myarr < filename.csv
myarr=("${myarr[@]#*,}")