awk-选择行的操作

awk-选择行的操作,awk,Awk,我有以下代码: /^$/ { flag=0; next; } /D Format/ { flag=0; next; } /F Format/ { flag=1; next; } /^26 / { next; } flag && /^ *[0-9]/ { print t($5) "\n" t($6); } function t(n, s) { s=index(n,"."); return (s ? substr(n,1,s+6) : n); } 这将为输入文件的这部分生成:

我有以下代码:

 /^$/ { flag=0; next; }
/D Format/ { flag=0; next; }
/F Format/ { flag=1; next; }
/^26 / { next; }
flag && /^ *[0-9]/ { print t($5) "\n" t($6); }
function t(n, s) {
s=index(n,".");
return (s ? substr(n,1,s+6) : n);
}
这将为输入文件的这部分生成:

                      Input-Output in F Format

No.  Curve    Input Param.        Correction     Output Param.    Standard Deviation
 9      0     43.8999000000     -0.2148692026     43.6850307974      0.1066086900
10      0      0.0883000000     -0.0081173828      0.0801826172      0.0006755954
11      0      2.5816650000      0.1530838229      2.7347488229      0.0114687081
15      0      0.2175000000      0.0018561462      0.2193561462      0.0017699976
16      0     80.4198910000      3.4449399961     83.8648309961      0.1158732928
20      0      1.9424000000      0.3078499311      2.2502499311      0.0047924544
23      0      3.5047300000      0.4315780848      3.9363080848      0.0052905759
24      0      5.5942300000      1.8976306735      7.4918606735      0.0092102115
26      0  54804.4046000000     -0.0029799077  54804.4016200923      0.0006133608
输出为:

43.685030
0.106608
0.080182
0.000675
2.734748
0.011468
0.219356
0.001769
83.864830
0.115873
2.250249
0.004792
3.936308
0.005290
7.491860
0.009210
我想将第行中的数字相乘,从:

11 by 180 and devided by 3.1415, 
16 by 100
20 by 10.
如何编写仅对某些行有效的算术运算?带有
NF
的东西? 第二个问题:如何编写更多的输入文件?
awk-f code input1 input2 input3 input4….
还是更好的方法? 多谢各位

编辑

 /^$/ { flag=0; next; }
/D Format/ { flag=0; next; }
/F Format/ { flag=1; next; }
/^ 9 / { print t($5) "\n" t($6);  } 
/^10 / { print t($5) "\n" t($6);  } 
/^11 / { print t($5*180/3.141592653589) "\n" t($6*180/3.141592653589);  }
/^15 / { print t($5*100) "\n" t($6*100);  }
/^16 / { print t($5) "\n" t($6);  } 
/^20 / { print t($5*10) "\n" t($6*10);  }
/^23 / { print t($5) "\n" t($6);  } 
/^24 / { print t($5) "\n" t($6);  }
function t(n, s) {
s=index(n,".");
return (s ? substr(n,1,s+6) : n);
}
输出

43.685030
0.106608
0.080182
0.000675
156.69
0.657109
21.9356
0.177
83.864830
0.115873
22.5025
0.047924
3.936308
0.005290
7.491860
0.009210
0.436850
0.106608
0.801826
0.675595
15.669
6.57109
21.9356
17.7
0.838648
0.115873
2.25025
4.79245
0.393630
0.529057
0.749186
0.921021

对于多个文件,我希望有6个小数位和最后一个数字0.009210,它们将按照您指示的方式工作 awk保留两个文件行计数器,一个用于每个文件中看到的所有行
NR
和一个表示当前文件中看到的行数
FNR

因此,如果在每个文件中,需要以特定方式处理相同的行号:

包括
…&&FNR==X
您的规则模式将选择X行进行特殊处理

在我看来,其余的你都掌握得很好。
然而,您可能认为需要对每一行进行显式处理,但也不能匹配一行,awk只需继续,而不需要显式的
下一步

对于多个文件,它们将按照您指示的方式工作 awk保留两个文件行计数器,一个用于每个文件中看到的所有行
NR
和一个表示当前文件中看到的行数
FNR

因此,如果在每个文件中,需要以特定方式处理相同的行号:

包括
…&&FNR==X
您的规则模式将选择X行进行特殊处理

在我看来,其余的你都掌握得很好。
但是,您可能认为需要对每一行进行显式处理,但也不能匹配某一行,awk只需继续,而不需要显式的
下一行

对不起,我不明白。我尝试了一些编辑(添加到我的问题中),但我不知道如何在函数t之前进行算术运算,以及为什么表中的数字在开始时没有标记。我不知道在哪里包含FNR==X。谢谢你我希望留下的线索是“规则模式”,它是规则之前的测试集合,用于确定是否执行了规则{…}。因此,在使用
标志时
测试和regex模式测试。数学可以用在需要的地方
{t(180*$5)..
应该是word或{foo=180*$5;t(foo)..`或
{5*=180;t($5)..
对于花哨的打印,首先阅读
printf
它将为您节省许多语言的大量工作。很抱歉,我不明白。我尝试了一些编辑(添加到我的问题中),但我不知道如何在函数t之前进行算术运算,以及为什么表中的数字在开始时没有标记。我不知道在哪里包括FNR==X。谢谢,我希望留下的线索是“规则模式”,它是规则之前的测试集合,用于确定规则{…}所以在你的
标志测试和正则表达式模式测试中,数学可以去需要的地方。
{t(180*$5)..
应该是word或{foo=180*$5;t(foo)..`或
{$5*=180;t($5)..
对于花哨的打印,首先阅读
printf
它将为你节省大量的语言工作