【问题标题】:Parsing a number from a file with using AWK使用 AWK 从文件中解析数字
【发布时间】:2018-03-13 21:05:24
【问题描述】:

我有一个包含 Windows“systeminfo”信息的文件。该文件如下所示:

Virtual Memory: Available: 13,160 MB
Virtual Memory: In Use:    3,143 MB
Virtual Memory: Available: 13,161 MB
Virtual Memory: In Use:    3,142 MB
Virtual Memory: Available: 13,162 MB
Virtual Memory: In Use:    3,141 MB

我只想解析数字并存储在 csv 文件中。 所以一个 csv 文件将被命名为“available.csv”并包含

13,160;13,161;13,162.

另一个名为“in_use.csv”的 csv 文件将包含 3,143;3,142,3,141。

我知道我可以使用: grep -r "Available" > available.csv 然后只提取号码。

如何使用 awk 完成此任务?

谢谢

【问题讨论】:

    标签: string parsing awk scripting


    【解决方案1】:

    Awk解决方案:

    awk '/Available/{ printf "%s%s",(!a)?"":";",$4 > "available.csv"; a++ }
         /In Use/{ printf "%s%s",(!b)?"":";",$5 > "in_use.csv"; b++ }' input
    

    【讨论】:

      【解决方案2】:

      GNU awk 解决方案。就文件名而言,更通用的方法:

      $ cat tst.awk
      BEGIN{FS=": +"}
      { split($3,a," ")                              # remove the MB from number
        gsub(/ /,"_",$2)                             # replace space by "_"
        f=tolower($2) ".csv"                         # construct filename
        printf "%s%s", (file[f]++?";":""), a[1] > f  # output number to file
      }
      END { for (f in file) close(f) }               # close all opened files
      

      复制粘贴:

      $ awk 'BEGIN{FS=": +"} \
             { split($3,a," ");gsub(/ /,"_",$2);f=tolower($2) ".csv"; \
               printf "%s%s", (file[f]++?";":""), a[1] > f} \
             END { for (f in file) close(f) }' input.txt
      

      【讨论】:

        猜你喜欢
        • 2017-09-28
        • 2018-10-27
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 2016-05-04
        • 2020-01-21
        相关资源
        最近更新 更多