我有包含内容的文件:
文件.txt:
Iteration 1
RAM: +456ms
Cache: +142ms (total +417ms)
Iteration 2
Spec: +152ms
Cache: +149ms (total +413ms)
Iteration 3
RAM: +184ms
Spec: +172ms
Searchms: +131ms (total +385ms)
First launch 4
RAM: +149ms
Searchms: +188ms
在此文件中,每个First launch
,内容可以不同,不是固定的(例如:First launch 3 包含三个元素,而 First launch 2 内容只有 2 个元素),因此之间可以有任意数量的内容First launch
一开始并不知道的模式。
预期输出:
RAM 456 184 149
Cache 142 149
Spec 152 172
Searchms 131 188
由于不知道确切的方法,我尝试了这段代码。
My code:
for i in {1..4}
do
awk "/First launch $i/{flag=1;next} /First launch $((i+1))/{flag=0} flag" file.txt> fl$i.txt
sed -i 's/\+//g' fl$i.txt
sed -i 's/://g' fl$i.txt
sed -i 's/(.*//g' fl$i.txt
sed -i 's/ms//g' fl$i.txt
awk '{print $1 "\t" $2}' fl$i.txt
done
我的输出有两个问题:
我正在为每个错误的模式生成文件。我也想删除ms
时间之后,但它也删除了ms
从模式名称(例如:Searchms 到 Search)
Output:
fl1.txt:
RAM 456
Cache 142
fl2.txt :
Spec 152
Cache 149
fl3.txt :
RAM 184
Spec 152
Search 131
fl4.txt :
RAM 149
Search 188
请建议我一种方法来获得预期的输出,而无需生成任何额外的文件,并具有删除的约束ms
时间过后。
一种使用 awk:
$ awk '
$1 !~ /^(|First)$/ { # avoid forbidden keywords and empty lines
gsub(/[^0-9]/,"",$2) # remove non-numerals
a[$1]=a[$1] OFS $2 # append to associative array
}
END { # in the end
for(i in a) # loop all keywords
print i a[i] # output
}' file
按 awk 默认顺序输出行(显示为随机):
Cache: 142 149
Searchms: 131 188
Spec: 152 172
RAM: 456 184 149
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)