我在一个路径中有大约 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
您的 csv 文件将具有 windows-line-ends。因此,您需要先将它们转换为 linux 格式。
dos2unix yourfile
会为你做的。如果您的盒子上没有
dos2unix
,也可以使用...根据sed1line.txt。
文件转换为 Unix 格式后,通常的
sed
-commands 应按预期工作。注意其他空白行中的空格:
sed '/^\s*$/d' yourfile
全部在一个 sed 命令中:
“空白”行很可能包含空白字符(回车是 DOS 或 Windows 程序编写的文件中的一个显着嫌疑人)。我们可以改变模式来考虑这些:
(注意也引用变量扩展!)
如果先合并然后删除空行,效率会更高一些。你可以这样做:
最后一个 perl 单行
MERGED_PROD.csv
在MERGED_PROD.csv.bak
. 您可以在上面的命令中替换-i.bak
为-i
跳过备份。