我有一个格式的数据文件
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/) 打印 $1,$3,$4,$7}'
得到如下结果
0106610856 M 50 12.061
0109480651 M 63 9.403
0111290260 F 83 9.747
我知道这是不正确的格式,因为如果第一个条件为真,if 循环将不会搜索 if $8 ~/N/。因此,只有当 $6 条件为假时,我的 awk 命令才会在 $8 条件为真时选择 l_val。如果 r_flag 和 l_flag 都设置为 N,我该如何更改我的 awk 命令以获取 r_val 和 l_val。
最佳答案
不要使用 if ..
else
。通过这种方式,您很容易错过一个 $6==$8=="N"
案例。
试试这个内衬:
awk 'NR>1{if($6=="N") print $1,$3,$4,$5; if($8=="N") print $1,$3,$4,$7 } ' file
关于linux - awk 根据标志打印值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15139941/