awk 条件测试语句
我真的很感激一些帮助。我几乎花了整个上午的时间。
我有结构字段 1 到 16 的数据,如下
4572 1307084940 RDCSWE 2006 1 5 0.28125 0.5 0.125 0.09375 0 0 0 0 0 0
4573 1307101627 RDCSWE 2006 1 5 0.6875 0.125 0.1875 0 0 0 0 0 0 0
4574 1307101642 RDCSWE 2006 1 5 0.5625 0.25 0.03125 0.15625 0 0 0 0 0 0
4575 1307101662 RDCSWE 2006 1 5 0.53125 0.25 0.1875 0.03125 0 0 0 0 0 0
4576 1307127329 RDCSWE 2006 1 5 0.4375 0.34375 0.09375 0.125 0 0 0 0 0 0
从字段 7 到 10 我需要对元素(范围从 0-1)和字段编号进行测试。
即对于每条记录,检查字段 7-10 的最大值(
如果找到),并在字段 7 中打印 $0, $6-4
如果找到并且在字段 8 中打印 $0, $6-3
如果找到并且在字段 9 中打印 $0, $6-2
如果找到并且在字段 10 中打印 $0, $6-1
我将非常感谢您的帮助。预先感谢您
编辑(由belisarius)
只是转录@Tumi2002(作者)的评论
抱歉,我的第6个字段(即$6)的值为1-5。
我正在尝试将字段 6=5 的记录重新分类为同一字段中的 1-4 个类)。
所以我有 4 个类,而不是 5 个类。
Awk '$6==5
{for i=7; i<11; i++)
if ($i==max) && NF==7) print $0,$6-4;
if ($i==max) && NF==8) print $0,$6-3;
if ($i==max) && NF==9) print $0,$6-2;
if ($i==max) && NF==10) print $0,$6-1
我在 awk 中的语法上苦苦挣扎
I would really appreciate some help. I spent almost the whole morning on it.
I have a data of structure field 1 to 16 as follows
4572 1307084940 RDCSWE 2006 1 5 0.28125 0.5 0.125 0.09375 0 0 0 0 0 0
4573 1307101627 RDCSWE 2006 1 5 0.6875 0.125 0.1875 0 0 0 0 0 0 0
4574 1307101642 RDCSWE 2006 1 5 0.5625 0.25 0.03125 0.15625 0 0 0 0 0 0
4575 1307101662 RDCSWE 2006 1 5 0.53125 0.25 0.1875 0.03125 0 0 0 0 0 0
4576 1307127329 RDCSWE 2006 1 5 0.4375 0.34375 0.09375 0.125 0 0 0 0 0 0
From field 7 to 10 I need a test on the elements (ranging fro 0-1) and the field number.
i.e. for every record, check the fields 7-10 for maximum value,
if found and its in field 7 print $0, $6-4
if found and its in field 8 print $0, $6-3
if found and its in field 9 print $0, $6-2
if found and its in field 10 print $0, $6-1
I'll be so grateful for the help. Thank you in advance
Edit (by belisarius)
Just transcripting a comment from @Tumi2002 (author)
Sorry, my 6th field (i.e. $6) has values 1-5.
I am trying to reclassify records where field 6=5 back into 1-4 classes in the same fieid).
So that instead of 5 classes I have 4.
Awk '$6==5
{for i=7; i<11; i++)
if ($i==max) && NF==7) print $0,$6-4;
if ($i==max) && NF==8) print $0,$6-3;
if ($i==max) && NF==9) print $0,$6-2;
if ($i==max) && NF==10) print $0,$6-1
I am struggling with the syntax in awk
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 ideone 运行
示例数据的输出:
编辑
修改回答您的评论:
输出:
在 ideone 上运行此处
Running at ideone
Output for your example data:
Edit
Modified answering your comment:
Output:
Running at ideone here
首先,感谢 belisarius 指向 ideone。
我的(更新的)解决方案现在可以正常工作:
HTH
First of all, thanks for belisarius for pointing to ideone.
My (updated) solution is working correctly now:
HTH