如何在bash脚本中读取csv文件到数组

时间:2014-03-10 01:49:22

标签: arrays linux bash shell csv

我已经编写了以下代码来读取我的csv文件(其中包含固定数量的列但不是固定数量的行)作为数组进入我的脚本。我需要它作为shell脚本。

usernames   x1    x2   x3  x4
username1,  5     5    4   2
username2,  6     3    2   0
username3,  8     4    9   3

我的代码

#!/bin/bash
set oldIFS = $IFS
set IFS=,
read -a line < something.csv

我使用的另一个选项是

#!/bin/bash
while IFS=$'\t' reaad -r -a line
do 
echo $line
done < something.csv

对于这两个我尝试了一些测试代码来查看数组行的大小是什么,我似乎得到第一个大小为10但数组只输出用户名。对于第二个,我似乎得到大小为0但数组输出整个csv。

非常感谢帮助!

1 个答案:

答案 0 :(得分:2)

您可以考虑将AWKFS变量中的正则表达式一起使用,如下所示:

 awk 'BEGIN { FS=",?[ \t]*"; } { print $1,"|",$2,"|",$3,"|",$4,"|",$5; }'

或者

 awk 'BEGIN { FS=",?[ \t]*"; OFS="|"; } { $1=$1; print $0; }'

$1=$1需要使用新的OFS重建$ 0)