bash - 带有双引号输入行的多行 CSV : output on a single line,,使用不同的分隔符

标签 bash csv awk multiline

我正在尝试将 CSV 的多行输出转换为 Bash 中的一行。

我的 CSV 文件如下所示:

hi,bye
hello,goodbye

最终目标是让它看起来像这样:

"hi/bye", "hello/goodbye"

这就是我目前所处的位置:

INPUT=mycsvfile.csv
while IFS=, read col1 col2 || [ -n "$col1" ]
do
  source=$(awk '{print;}' | sed -e 's/,/\//g' )
  echo "$source";
done < $INPUT

输出位于每一行,我可以将 , 更改为/,但我不确定如何将输出放在带有引号的一行上。

我尝试过开始:

source=$(awk 'BEGIN { ORS=", " }; {print;}'| sed -e 's/,/\//g' )

但这仅输出最后一行,并省略第一个 hi/bye:

hello/goodbye

有人可以帮助我吗?

最佳答案

只需在 awk 中完成整个事情(大部分)。最终的 sed 只是在这里修剪一些尾随的多余内容并在末尾注入(inject)换行符:

< mycsvfile.csv awk '{print "\""$1, $2"\""}' FS=, OFS=/ ORS=", " | sed 's/, $//'

关于bash - 带有双引号输入行的多行 CSV : output on a single line,,使用不同的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43484042/

相关文章:

git - 在远程主分支上 merge

ios - 将大型CSV文件加载到核心数据中最快的方法是什么

awk - 返回两个文件中的公共(public)字段

shell - 在 .csv 文件中使用 shell 脚本在逗号上拆分字符串但忽略双引号内的逗号?

SVN:和 bash:如何判断是否有未提交的更改

linux - 导出新变量时如何组合变量名?

json - Powershell convertfrom-json |转换为 csv

python - 包含 CSV 文件的字典列表中元素的平均值

bash - mysqldump 与 db 在一个单独的文件中

bash - 如何缓存当前 session 的 Bash 完成脚本中使用的变量