读取文件夹中的所有csv文件,并仅在输出文件中显示单个标头

时间:2017-05-02 10:01:05

标签: csv batch-file

我想读取文件夹中的所有csv文件,并使用awk文件进行编译。下面是我写的代码:

@echo off

del c_1.csv

setlocal ENABLEDELAYEDEXPANSION

set file2=*.csv
set outputfile=c_1.csv

REM get header:
set /p header=<%outputfile%

for %%i in (*.csv) do (
if not exist %header% (
nawk -f "c_1.awk" *.csv >> c_1.csv
)
if exist %header% (
nawk -f more +1 "c_1.awk" *.csv >> c_1.csv
)
)

echo done!

setlocal

pause
goto:eof

但是标题仍然打印在我的输出文件中,并且还打印了额外的数据,这些数据也是错误的。 Ur的帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

这不会做你想要的吗?

nawk "FNR==1 && NR!=1{next;}{print}" *.csv>c_1.csv

来自here的想法。

编辑
由于我似乎错误地理解了您的请求,(我没有正确阅读该问题并假设您正在连接文件,但只保留了标题第一)。您似乎在当前目录中的所有csv上运行awk脚本c_1.awk,如果任何csv的标头与outputfile的输入不匹配,那么您打算'编译'整个文件,如果它,那么你想绕过那个标题。

批处理文件的主要问题在于if exist没有告诉您%header%的内容是否为空,因为您需要If Defined header。也就是说,由于您已经删除了输入文件,因此set /p命令会输出错误The system cannot find the file specified.,并且仍然无法定义标题。

我认为你真正应该做的是调整你的awk脚本,使得头部匹配作为输入参数。这比尝试用不同语言检查内容然后根据内容运行两个awk命令之一要好得多。