在一个文件夹中,我有2个文件。 Valuation.csv和另一个文件myScript.sh
我的CSV文件有10行和5列。我曾尝试多次阅读但它从未奏效。这是我试过的……
这是我的文件data.csv
Site,Post,Subject,User,Status stackover flow,bash,read csv,James,ok git,linux,core,Novy,ko
在我的bash脚本中我有类似的东西:
#!/bin/bash INPUT=./data.csv OLDIFS=$IFS IFS=, [ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; } while read site post subject usr status do echo "Site : $site" echo "Post : $post" echo "Subject : $subject" echo "User : $usr" echo "Status : $status" done < $INPUT IFS=$OLDIFS
产量
站点:stackover流程 发布:bash 主题:阅读csv 网友:詹姆斯 状态:好的 网站:git 发布:linux 主题:核心 用户:诺维 状态:ko
你可以看看 这里
詹姆斯,避免在bash循环中调用实用程序。这非常低效。避免使用固定数量的字段 - 如果添加另一个字段会怎样?你可以阅读 .csv 通过简单地使用,bash中的数据相当容易 read -a array... 并设置 内部字段分隔符 在逗号上分词(例如 IFS=$',\n' )。
.csv
read -a array...
IFS=$',\n'
例如,编写一个带有的脚本 .csv 要读取的文件名作为第一个参数,您可以这样做:
#!/bin/bash declare -i row=0 while IFS=$',\n' read -r -a array; do printf "row %d - read %d fields.\n" $((row++)) ${#array[@]} for i in "${array[@]}"; do printf " %-12s" "$i" done echo "" done < "$1"
( 的 注意: 强> 而你在实践中想要处理整个问题 awk ,因为这似乎是一个bash练习,简而言之 .csv 文件,bash超过能力)
awk
的 示例数据 强>
(我不打算重新输入你的电子表格,所以这里是前两行)
$ cat company.csv Facebook,35587,55800000000,1567988,491000000000,8.80x Uber,16000,11300000000,706250,120000000000,10.6x
运行脚本并简单地输出行数和每行字段,然后输出字段值本身,您将获得:
$ bash readcsv.sh company.csv row 0 - read 6 fields. Facebook 35587 55800000000 1567988 491000000000 8.80x row 1 - read 6 fields. Uber 16000 11300000000 706250 120000000000 10.6x
仔细看看,如果您有疑问,请告诉我。