如何使用 awk 包含 header
how to include header using awk
即使在使用 NR>1 之后,我仍然想念 header。有什么建议吗?
cat rm2
t1 t2 t3 t4 tn max avg.of.rest
l1 0 0.1448 0.2295 0.2896 0.3362 0.3362 0.166
l3 0.1395 0.1395 0.1395 0.1395 0.4421 0.4421 0.140
l4 0.5779 0.138 0.09591 0.05014 0.138 0.5779 0.106
awk 'NR>1{ if($NF>0) print [=11=]"\t"$(NF-1)/$NF; else print [=11=]"\t"$(NF-1)}' rm2
l1 0 0.1448 0.2295 0.2896 0.3362 0.3362 0.166 2.0253
l3 0.1395 0.1395 0.1395 0.1395 0.4421 0.4421 0.140 3.15786
l4 0.5779 0.138 0.09591 0.05014 0.138 0.5779 0.106 5.45189
awk 'NR==1; NR>1 ....' file
你想做的会写成:
awk 'NR>1{[=10=]=[=10=]"\t"$(NF-1)/($NF?$NF:1)}1' rm2
但是你为什么要这样做而不是仅仅调整你已经得到的脚本 () 通过简单地改变这一行在最后打印一个额外的字段:
print [=11=], max, (cnt?tot/cnt:0)
至:
ave = (cnt?tot/cnt:0)
print [=12=], max, ave, (ave?max/ave:max)
即使在使用 NR>1 之后,我仍然想念 header。有什么建议吗?
cat rm2
t1 t2 t3 t4 tn max avg.of.rest
l1 0 0.1448 0.2295 0.2896 0.3362 0.3362 0.166
l3 0.1395 0.1395 0.1395 0.1395 0.4421 0.4421 0.140
l4 0.5779 0.138 0.09591 0.05014 0.138 0.5779 0.106
awk 'NR>1{ if($NF>0) print [=11=]"\t"$(NF-1)/$NF; else print [=11=]"\t"$(NF-1)}' rm2
l1 0 0.1448 0.2295 0.2896 0.3362 0.3362 0.166 2.0253
l3 0.1395 0.1395 0.1395 0.1395 0.4421 0.4421 0.140 3.15786
l4 0.5779 0.138 0.09591 0.05014 0.138 0.5779 0.106 5.45189
awk 'NR==1; NR>1 ....' file
你想做的会写成:
awk 'NR>1{[=10=]=[=10=]"\t"$(NF-1)/($NF?$NF:1)}1' rm2
但是你为什么要这样做而不是仅仅调整你已经得到的脚本 (
print [=11=], max, (cnt?tot/cnt:0)
至:
ave = (cnt?tot/cnt:0)
print [=12=], max, ave, (ave?max/ave:max)