我想读取文件夹中的所有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的帮助将不胜感激。谢谢
答案 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命令之一要好得多。