我正在使用Solaris SunOS 5.10。我有一个目录,我已经填充了许多文本文件。像这样:
CMGW9.log
CMGW11.log
CMGW2.log
.
.
CMGWx.log
我只使用以下方法过滤文件中的有趣部分:
cat CMGW9.log | nawk '/productNumber|productRevision/'
我得到的输出是:
productNumber GMPV4_CNP_R6.3.2.0D
productRevision R6A
现在需求是一个csv文件,如下所示:
|MGW_Name| Product Number |Product Revision|
------------------------------------------------
CMGW9 GMPV4_CNP_R6.3.2.0D| R6A
CMGW11 xxxxxxxxxxxxxxxxxxx R6A
CMGW2 xxxxxxxxxxxxxxxxxxx R6A
. . . . . . . . .
CMGWx xxxxxxxxxxxxxxxxxxx xx
请帮忙。感谢。
答案 0 :(得分:1)
这里有一个可能的解决方案的一部分;
$ cat getloginfo.sh
#!/bin/bash
for file in CMGW*.log
do
filename=${file%.log}
pn=`awk '$0 ~ /productNumber/ {print $2}' $file`
pr=`awk '$0 ~ /productRevision/ {print $2}' $file`
echo -e "$filename\t$pn\t$pr" >> CMGWresume.log
done
$ ./getloginfo.sh
$ cat CMGWresume.log
CMGW11 GMPV5.3.2.0D R6AB
CMGW9 GMPV4_CNP_R6.3.2.0D R6A
答案 1 :(得分:1)
试试这个。它会生成一个CSV文件。
awk -v OFS=, 'FNR == 1 { key = FILENAME; sub(/[.][^.]*$/, "", key); keys[++k] = key }
/productNumber|productRevision/ { a[key, $1] = $2 }
END {
for (i = 1; i <= k; ++i) {
key = keys[i]
print key, a[key, "productNumber"], a[key, "productRevision"]
}
}' *.log
这可能会产生你提出的表格:
awk -v OFS="\t" 'FNR == 1 { key = FILENAME; sub(/[.][^.]*$/, "", key); keys[++k] = key }
/productNumber|productRevision/ { a[key, $1] = $2 }
END {
print "|MGW_Name|", "Product Number", "|Product Revision|"
print "------------------------------------------------"
print
for (i = 1; i <= k; ++i) {
key = keys[i]
print key, a[key, "productNumber"], a[key, "productRevision"]
}
}' *.log
您可以使用printf
代替print
来更改格式。