String 使用AWK解析文件中的数字

String 使用AWK解析文件中的数字,string,parsing,awk,scripting,String,Parsing,Awk,Scripting,我有一个包含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:

我有一个包含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文件将包含
3143;3142,3141

我知道我可以使用:
grep-r“Available”>Available.csv
然后只提取数字

如何使用awk实现这一点


感谢Awk解决方案:

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

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