编辑csv文件

时间:2016-01-14 19:02:37

标签: macos bash csv terminal

我们收到了18,000个CSV文件,每个文件包含2行文字。

这两行应该是一行,用逗号分隔。

  

FK1QG5QL
  B8:9D:7D

应该出现

  

FK1QG5QL,B8:9D:7D

我试图从第一行删除返回并用逗号替换它。

2 个答案:

答案 0 :(得分:1)

这个会起作用吗?

for f in *.csv; do awk 'BEGIN {l=""} !/^ *$/ {if (l!="") {l=l","}; l=l$0} END {print l}' "$f"; done

您可以将上述命令的输出重定向到文件:

for f in *.csv; do awk 'BEGIN {l=""} !/^ *$/ {if (l!="") {l=l","}; l=l$0} END {print l}' "$f"; done > combined

如果要更改每个文件,可以使用下一个版本。它将创建另一个名为* .copy的文件:

for f in *.csv; do awk 'BEGIN {l=""} !/^ *$/ {if (l!="") {l=l","}; l=l$0} END {print l}' "$f" > "$f".copy; done

答案 1 :(得分:0)

您是否拥有paste命令?

for f in *; do
   mv "$f" "$f.bak" && paste -sd "," "$f.bak" > "$f"
done
# test first before uncommenting next line
# rm *.bak

如果没有粘贴,您可以尝试其他解决方案:

head -1 input.csv | tr '\n' ',' ; tail -1 input.csv

cat input.csv | tr "\\n" "," | sed 's/,$/\n/'

printf -v oneline "%s," $(cat input.csv); echo "${oneline%,}"

sed 'N;s/\n/,/' input.csv

set -- $(cat input.csv); IFS=,; echo "$*"