删除 MS EXCEL CSV 文件末尾的空行

删除 MS EXCEL CSV 文件末尾的空行

我在一条路径上放置了大约 300 个 CSV 文件。这些文件名有 3 个不同的类别*_PROD.csv,即 、*_DEV.csv*_UAT.csv

这些文件有许多空行(大约 1000 个),当进程将它们复制到路径时,这些空行被插入到记录的末尾。

我想从所有这些文件中删除空白行。删除空格后,我必须对这些文件执行合并。

我已经尝试过这个:

sed -i '/^$/d' ${File_Path}*_PROD.csv
sed -i '/^$/d' ${File_Path}*_DEV.csv
sed -i '/^$/d' ${File_Path}*_UAT.csv

但这并没有按预期工作。

我希望文件保持不变,因为一旦从末尾删除空行,我就必须执行其他操作。

请建议。

我的脚本供参考:

File_Path=/File_Path

dos2unix ${File_Path}*_PROD.csv
dos2unix ${File_Path}*_DEV.csv
dos2unix ${File_Path}*_UAT.csv



sed -i '/^\s*$/d' ${File_Path}*_PROD.csv
sed -i '/^\s*$/d' ${File_Path}*_DEV.csv
sed -i '/^\s*$/d' ${File_Path}*_UAT.csv

awk '(NR == 1) || (FNR > 1)' ${File_Path}*PROD.csv > Merged_PROD.csv
awk '(NR == 1) || (FNR > 1)' ${File_Path}*_DEV.csv > Merged_DEV.csv
awk '(NR == 1) || (FNR > 1)'  ${File_Path}*_UAT.csv > Merged_UAT.csv

答案1

您的 csv 文件将有 windows 行尾。所以你需要先将它们转换为linux格式。

dos2unix yourfile会为你做的。

如果您的盒子上没有dos2unix,也可以通过以下方式实现相同的目的...

sed "s/\r//" infile >outfile         # UnxUtils sed v4.0.7 or higher
tr -d \r <infile >outfile            # GNU tr version 1.22 or higher

根据sed1line.txt

一旦文件转换为 Unix 格式,通常的sed命令应该按预期工作。

注意空行中的空格:sed '/^\s*$/d' yourfile

全部在一个 sed 命令中:

sed -e 's/\r// -e /^\s*$/d' yourfile > outputfile

答案2

“空白”行很可能包含空白字符(在 DOS 或 Windows 程序编写的文件中,回车符是一个值得注意的可疑之处)。我们可以改变模式来考虑这些:

sed -i -e '/^[[:space:]]*$/d' \
    "${File_Path}"*_{PROD,DEV,UAT}.csv

(注意还要引用变量扩展!)

答案3

如果先合并然后删除空行,效率会稍微高一些。你可以这样做:

cat *_PROD.csv > MERGED_PROD.csv
dos2unix MERGED_PROD.csv
perl -i.bak -ne 'print if /\S/' MERGED_PROD.csv

最后一个 Perl 行将原件的副本保留MERGED_PROD.csvMERGED_PROD.csv.bak.您可以在上面的命令中替换-i.bak为 just以跳过备份。-i

相关内容