一直在linux下写awk脚本,今天移植了一次,具体如下,
linux下程序总共两个sh,一个awk,
#process.sh
#!/bin/bash
dos2unix GmidChecklist.csv
awk -F',' '{if(NR > 1) {filename = $1; field = $2; cmd="./read_field.sh "filename" "field; system(cmd) }}' GmidChecklist.csv > result.txt
#read_field.sh
#!/bin/bash
awk -v field=$2 -F',' -f read_field.awk table/$1
#read_field.awk
#!/bin/awk
BEGIN{
filename = "";
}
{
if(filename == "")
{
split(FILENAME, array, "/");
filename=array[length(array)];
}
if(NR==1)
{
for(i=0; i < NF; i++)
{
if($i==field)
{
field_idx = i;
}
}
}
if(NR > 3)
{
print $field_idx" "filename;
}
}
windows下程序总共两个bat,一个awk,
::process.bat
@ECHO OFF
.\awk.exe -F"," "{if(NR > 1) {filename = $1; field = $2; cmd="""read_field.bat """filename""" """field; system(cmd) }}" .\GmidChecklist.csv > output.txt
pause
::read_field.bat
@ECHO OFF
.\awk.exe -v field=%2 -F"," -f .\read_field.awk table\%1
::read_field.awk
BEGIN{
filename = """""";
}
{
if(filename == """""")
{
split(FILENAME, array, """\\""");
filename=array[length(array)];
}
if(NR==1)
{
for(i=0; i < NF; i++)
{
if($i==field)
{
field_idx = i;
}
}
}
if(NR > 2)
{
print $field_idx""" """filename;
}
}
主要的不同,windows下bat脚本中不能出现单引号,必须用双引号,比如awk跟着的参数和执行脚本,另外如果awk执行体中有打印需要用到双引号,需要用3个双引号代替一个双引号。
awk.exe可以下载 https://download.csdn.net/download/cleanfield/34661358