arrays - 如何读入csv文件以在bash脚本中排列

标签 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。

非常感谢您的帮助!

最佳答案

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

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

或者这个

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

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

关于arrays - 如何读入csv文件以在bash脚本中排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22290809/

相关文章:

java - java 数组输出中的间距

javascript - 如何在 Chrome 中显示 JavaScript 数组/对象的所有属性?

C# 变长字符串数组

linux - 单声道流问题

arrays - 在 Bash 脚本中比较数组中的字符串

linux - 为什么我的 awk 命令多打印一行?

c++ - 仅使用存储在数组中的字符串中的第一个字母

python - celeryd 已死但 subsys 已锁定

java - avahi 无法找到由 JmDNS 创建的服务

bash - 为什么bash $()可以设置环境变量?