【发布时间】:2019-02-21 14:22:27
【问题描述】:
我有包含内容的文件:
文件.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
由于不知道确切的方法,我已经尝试过这段代码。
我的代码:
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 to Search)
输出:
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。
【问题讨论】:
-
顺便说一句,
sed -i s/a/b/' file; sed -i 's/c/d/' file更好地表示为sed -i -e 's/a/b/' -e 's/c/d/' file,它只在整个文件中循环一次。 -
你真的想要这个吗?您正在失去 RAM 和缓存(以及其他项目)之间的相关性,我认为这应该有用吗?