我有一个(例如100个)CSV文件,其中一些(比如20)是空的(即0字节文件)。我想将这些文件连接成一个单独的CSV文件(例如assorted.csv
),满足以下要求:
对于每个空文件,assorted.csv
中必须有一个空行。
看起来简单地执行cat *.csv >> assorted.csv
会完全跳过空文件,因为它们没有任何行,因此没有任何内容可以连接。
虽然我可以使用任何高级编程语言解决这个问题,但我想知道是否以及如何使用Bash实现这一目标。
答案 0 :(得分:3)
只需进行循环并检测文件是否为空。如果它为空,只需在其中回显文件名+逗号:这将创建一个近空行。否则,在每行前面加上文件名+逗号。
#!/bin/bash
out=assorted.csv
# delete the file prior to doing concatenation
# or if ran twice it would be counted in the input files!
rm -f "$out"
for f in *.csv
do
if [ -s "$f" ] ; then
#cat "$f" | sed 's/^/$f,/' # cat+sed is too much here
sed "s/^/$f,/" "$f"
else
echo "$f,"
fi
done > $out