awk处理不同扩展名的文件

awk processing files with different extensions

我必须在一个 awk 脚本中处理多个 CSVTXT 文件。我在 windows 上的 cmd 文件看起来像:gawk -f script.awk *.csv *.txt > output.file 我想使用此 cmd 文件,因为我不想在想要 运行 脚本时总是输入命令提示符。我想用不同的文件类型执行不同的任务。我已经在脚本文件中尝试了一些东西,比如 if (match(FILENAME, ".csv")) && (FNR > 1) 但其中 none 是有效的。我有大约 4-5 CSV 个文件和很多(比如 1000+)TXT 个文件,这些都是输入文件。 CSV 文件的内容都在同一个模式中,引号之间有一列。示例:

"Player"
"adigabor"

我想在处理它们时忽略所有输入 CSV 文件的第一行,并将每条记录 w/o 引号添加到数组中,然后我想处理 TXT 文件,我可以做的很好,我的问题是我无法在一个脚本中使用不同的输入文件扩展名执行不同的任务。

如果您以何种方式告诉我们,那将非常有用 "none of them were working" 所以我们不只是猜测,但无论如何:

match(FILENAME, ".csv") 的主要问题是它会匹配 csv 文件名中任意位置以任何字符开头。要获取 end 字面意思 .csv 的文件,您需要:

match(FILENAME,/\.csv$/)

但您不需要为此调用函数:

FILENAME ~ /\.csv$/

所以你的脚本看起来像:

FILENAME ~ /\.csv$/ {
    if ( FNR > 1 ) {
        do CSV stuff
    }
    next
}
{
    do TXT stuff
}

如果您仍然不能做您想做的任何事情,请编辑您的问题以包含示例输入文件(每个小 .csv 和 .txt 文件中至少有一个)和预期输出以及更好的解释你正在尝试做什么。