我们收到了18,000个CSV文件,每个文件包含2行文字。
这两行应该是一行,用逗号分隔。
FK1QG5QL
B8:9D:7D
应该出现
FK1QG5QL,B8:9D:7D
我试图从第一行删除返回并用逗号替换它。
答案 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 "$*"