Linux Awk打印值取决于标志

Linux Awk打印值取决于标志,linux,sed,awk,Linux,Sed,Awk,我有一个格式为的数据文件 ID Date Sex Age r_val r_flag l_val l_flag 0106610856 16/09/11 M 50 12.061 N 11.447 N 0107470802 09/09/11 F 64 3.146 A 4.338 A 0108490513 21/07/11 M 61 8.

我有一个格式为的数据文件

ID       Date            Sex     Age     r_val  r_flag  l_val    l_flag
0106610856   16/09/11    M   50      12.061  N       11.447  N
0107470802   09/09/11    F   64      3.146   A       4.338   A
0108490513   21/07/11    M   61      8.243   A   7.344   A
0108590534   18/08/11    M   52      4.714   A   5.106   A
0109480651   26/07/12    M   63      9.403   N   9.136   N
0110460758   21/07/11    M   64      5.643   I   4.272   I
0111290260   08/11/12    F   83      9.747   N   8.551   A
0111410339   07/02/13    M   71      4.979   A   4.482   A
我想做的是打印到一个新的文件ID、性别、年龄和值(无论是r_val还是l_val,只要其相应的标志设置为N)。下面是上面的示例输出

0106610856        M      50      12.061 
0106610856        M      50      11.447         
0109480651        M      63      9.403   
0109480651        M      63      9.136   
0111290260        F      83      9.747  
我尝试了以下Awk命令来实现这一点:
Awk'{if($6~/N/)print$1,$3,$4,$5;else if($6~/N/)print$1,$3,$4,$7}'
并得到以下结果

0106610856 M 50 12.061
0109480651 M 63 9.403
0111290260 F 83 9.747

我知道这是不正确的格式,因为如果第一个条件为true,if循环将不会搜索$8~/N/。因此,只有当$6条件为false时,当$8条件为true时,我的awk命令才会拾取l_val。如果r_标志和l_标志都设置为N,如何更改awk命令以拾取r_值和l_值。

如果..
否则请不要使用
。这样,您只需错过一个
$6==$8==“N”
案例

试试这一行:

 awk 'NR>1{if($6=="N") print $1,$3,$4,$5; if($8=="N") print $1,$3,$4,$7 } ' file