我有一个包含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完成此操作?
由于
答案 0 :(得分:1)
Awk 解决方案:
awk '/Available/{ printf "%s%s",(!a)?"":";",$4 > "available.csv"; a++ }
/In Use/{ printf "%s%s",(!b)?"":";",$5 > "in_use.csv"; b++ }' input
答案 1 :(得分:0)
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