在bash中连接文件时处理空文件

时间:2016-09-26 17:16:54

标签: bash csv

我有一个(例如100个)CSV文件,其中一些(比如20)是空的(即0字节文件)。我想将这些文件连接成一个单独的CSV文件(例如assorted.csv),满足以下要求:

对于每个空文件,assorted.csv中必须有一个空行。

看起来简单地执行cat *.csv >> assorted.csv会完全跳过空文件,因为它们没有任何行,因此没有任何内容可以连接。

虽然我可以使用任何高级编程语言解决这个问题,但我想知道是否以及如何使用Bash实现这一目标。

1 个答案:

答案 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