【问题标题】:AWK remove blank lines and append empty columns to all csv files in the directoryAWK 删除空行并将空列附加到目录中的所有 csv 文件
【发布时间】:2021-07-05 19:01:05
【问题描述】:

您好,我正在寻找一种将以下所有命令组合在一起的方法。

  1. 删除 csv 文件中的空白行(逗号分隔)
  2. 为每行添加多个空列,直到第 100 列
  3. 对文件夹中的所有文件执行操作 1 和 2

我还在学习,这是我能得到的最好的:

awk '!/^[[:space:]]*$/' x.csv > tmp && mv tmp x.csv
awk -F"," '($100="")1' OFS="," x.csv > tmp && mv tmp x.csv

它们单独工作,但我不知道如何将它们组合在一起,我正在寻找方法让它遍历目录下的所有文件。

正在寻找具体的 AWK 代码或调用 AWK 的 shell 脚本。 谢谢!

一个示例输入是:

a,b,c

x,y,z

预期的输出是:

a,b,c,,,,,,,,,,
x,y,z,,,,,,,,,,

【问题讨论】:

  • 请发布一些具有预期输出的示例数据。不要将它们作为 cmets 或图像发布。谢谢。

标签: bash csv awk


【解决方案1】:

您可以在一个脚本中组合而无需任何循环

$ awk 'BEGIN{FS=OFS=","} FNR==1{close(f); f=FILENAME".updated"} NF{$100=""; print > f}' files...

它不会覆盖原始文件。

【讨论】:

    【解决方案2】:

    您可以将第一个的输出通过管道传输到另一个:

    awk '!/^[[:space:]]*$/' x.csv | awk -F"," '($100="")1' OFS="," > new_x.csv
    

    如果您想对目录中的所有文件运行上述操作,您可以:

    shopt -s nullglob
    for f in yourdirectory/*.csv; do
      awk '!/^[[:space:]]*$/' "${f}" | awk -F"," '($100="")1' OFS="," > new_"${f}"
    done
    

    shopt -s nullglob 是为了让一个空目录不会给你一个文字*。引用自a good source for about looping through files

    【讨论】:

      【解决方案3】:

      使用recent enough GNU awk 你可以:

      $ gawk -i inplace 'BEGIN{FS=OFS=","}/\S/{NF=100;$1=$1;print}' *
      

      解释:

      $ gawk -i inplace '   # using GNU awk and in-place file editing
      BEGIN {
          FS=OFS=","        # set delimiters to a comma
      }
      /\S/ {                # gawk specific regex operator that matches any character that is not a space
          NF=100            # set the field count to 100 which truncates fields above it
          $1=$1             # edit the first field to rebuild the record to actually get the extra commas
          print             # output records
      }' *
      

      一些测试数据(第一个空记录是空的,第二个空记录有一个空格和一个制表符,相信我兄弟):

      $ cat file
      1,2,3
      
        
      1,2,3,4,5,6,
      1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101
      

      GNU awk 程序执行后cat file 的输出:

      1,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
      1,2,3,4,5,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
      1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
      

      【讨论】:

        猜你喜欢
        • 2017-05-13
        • 2014-04-17
        • 1970-01-01
        • 2016-10-29
        • 1970-01-01
        • 2015-04-11
        • 2011-02-18
        • 2012-05-08
        • 1970-01-01
        相关资源
        最近更新 更多