【发布时间】:2017-05-18 23:13:14
【问题描述】:
我在编写 AWK 语句时遇到困难,该语句将在指定条件下两次打印出一组行,并且可以选择更改重复行中的值。例如,如果一行的第一个字段是 11 ($1=11),那么我想将该行和后面的行打印两次(调整第二列 ($2) 中的值。
到目前为止,这就是我所拥有的,但它不会复制第一个字段 = 到 11 和以下行的行。
awk '{if(NF<3) print $0; if(NF==3 && $1==11) print $0, 1, 20; if(NF==3 && $1 != 11) print $0, 0, 0; if(NF>3) print $0;}'
输入示例
1 3
6 0.1 99
0.100 0.110 0.111
7 0.4 88
0.200 0.220 0.222
11 0.5 77
0.300 0.330 0.333
2 2
7 0.3 66
0.400 0.440 0.444
11 0.7 55
0.500 0.550 0.555
这是我想做的简化版本,所以为了简单起见,我希望打印的 NR 其中 $1==11 和下一行 (NR+1) 具有第二列中的值 ( $2) 是原始价值的一半。例如,对于 1 3 部分下的行分组,11 之后的值为 0.5。理想情况下,打印出的行将具有 11 之后的值为 0.25。
理想输出
1 3
6 0.1 99 0 0
0.100 0.110 0.111
7 0.4 88 0 0
0.200 0.220 0.222
11 0.25 77 1 20
0.300 0.330 0.333
11 0.25 77 1 20
0.300 0.330 0.333
2 2
7 0.3 66 0 0
0.400 0.440 0.444
11 0.35 55 1 20
0.500 0.550 0.555
11 0.35 55 1 20
0.500 0.550 0.555
【问题讨论】: