【问题标题】:awk processing files with different extensionsawk 处理不同扩展名的文件
【发布时间】:2016-08-05 10:21:16
【问题描述】:

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

"Player"
"adigabor"

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

【问题讨论】:

    标签: csv awk gawk


    【解决方案1】:

    如果您告诉我们“他们都没有工作”的方式将非常有用,所以我们不仅仅是猜测,但无论如何:

    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 文件中的至少一个)和预期输出以及更好地解释什么你正在尝试做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多