使用重复模式对文件部分中的行进行编号
Numbering lines in sections of file with repeating pattern
我正在尝试使用 awk 在较大的文件中使用 scan-hgi-oi.[0-9][0-9][0-9].out4
模式对重复行进行编号
我关闭成功的是以下命令
awk 'BEGIN{i=0}{if (="scan-hgi-oi.[0-9][0-9][0-9].out4") { i=i+1} printf"%i\n","%f",i,}' test2 > test3
这似乎只是用数字 0 替换每一行
我之所以想用awk而不是sed来解决这个问题是因为每个部分的模式重复次数不同。
该文件包含如下部分:
xxxxxxx\
yyyyyyy\
zzzzzz\
scan-hgi-oi.001.out4 number\
scan-hgi-oi.001.out4 number\
scan-hgi-oi.001.out4 number\
ppppppp
xxxxxx\
yyyyyyy\
zzzzzzz\
scan-hgi-oi.002.out4 number\
scan-hgi-oi.002.out4 number\
scan-hgi-oi.002.out4 number\
scan-hgi-oi.002.out4 number\
ppppppp
我想得到下面的结果。
xxxxxx\
yyyyyyy\
zzzzzzz\
1 number\
2 number\
3 number\
ppppppp
xxxxxx\
yyyyyyy\
zzzzzzz\
1 number\
2 number\
3 number\
4 number\
ppppppp
希望能帮到你。
Svend 致以诚挚的问候
当前 awk
代码的问题:
="scan-hgi-oi.[0-9][0-9][0-9].out4"
是赋值(单=
);对于测试,您需要使用双 =
(=="scan...."
)(尽管还需要修改代码以处理尾随 \
)
if (="scan ...")
(赋值,而不是测试)总是评估为 'false'(在这种情况下),因此永远不会执行 i=i+1
(即,i
将始终是 =0
)
printf "%i\n","%f",i,
- 格式字符串 ("%i\n"
) 只有一个占位符,所以只有 3 个参数 ("%f"
, i
, </code>)使用了 <code>"%f"
并且由于字符串 "%f"
是无效的 i
nteger %i
最终在所有调用中被替换为 0
...
- 因此所有输出行都是
0
- 虽然修复了
printf
调用是可行的,但需要更多代码来解决当前行与替换行的条件打印
修改当前代码的一个想法:
$ awk '/scan-hgi-oi.[0-9]{3}.out4/ {print ++i,"number\"; next} {i=0; print}' sample.dat
xxxxxxx\
yyyyyyy\
zzzzzz\
1 number\
2 number\
3 number\
ppppppp
xxxxxx\
yyyyyyy\
zzzzzzz\
1 number\
2 number\
3 number\
4 number\
ppppppp
我正在尝试使用 awk 在较大的文件中使用 scan-hgi-oi.[0-9][0-9][0-9].out4
模式对重复行进行编号
我关闭成功的是以下命令
awk 'BEGIN{i=0}{if (="scan-hgi-oi.[0-9][0-9][0-9].out4") { i=i+1} printf"%i\n","%f",i,}' test2 > test3
这似乎只是用数字 0 替换每一行
我之所以想用awk而不是sed来解决这个问题是因为每个部分的模式重复次数不同。
该文件包含如下部分:
xxxxxxx\
yyyyyyy\
zzzzzz\
scan-hgi-oi.001.out4 number\
scan-hgi-oi.001.out4 number\
scan-hgi-oi.001.out4 number\
ppppppp
xxxxxx\
yyyyyyy\
zzzzzzz\
scan-hgi-oi.002.out4 number\
scan-hgi-oi.002.out4 number\
scan-hgi-oi.002.out4 number\
scan-hgi-oi.002.out4 number\
ppppppp
我想得到下面的结果。
xxxxxx\
yyyyyyy\
zzzzzzz\
1 number\
2 number\
3 number\
ppppppp
xxxxxx\
yyyyyyy\
zzzzzzz\
1 number\
2 number\
3 number\
4 number\
ppppppp
希望能帮到你。
Svend 致以诚挚的问候
当前 awk
代码的问题:
="scan-hgi-oi.[0-9][0-9][0-9].out4"
是赋值(单=
);对于测试,您需要使用双=
(=="scan...."
)(尽管还需要修改代码以处理尾随\
)if (="scan ...")
(赋值,而不是测试)总是评估为 'false'(在这种情况下),因此永远不会执行i=i+1
(即,i
将始终是=0
)printf "%i\n","%f",i,
- 格式字符串 ("%i\n"
) 只有一个占位符,所以只有 3 个参数 ("%f"
,i
,</code>)使用了 <code>"%f"
并且由于字符串"%f"
是无效的i
nteger%i
最终在所有调用中被替换为0
...- 因此所有输出行都是
0
- 虽然修复了
printf
调用是可行的,但需要更多代码来解决当前行与替换行的条件打印
修改当前代码的一个想法:
$ awk '/scan-hgi-oi.[0-9]{3}.out4/ {print ++i,"number\"; next} {i=0; print}' sample.dat
xxxxxxx\
yyyyyyy\
zzzzzz\
1 number\
2 number\
3 number\
ppppppp
xxxxxx\
yyyyyyy\
zzzzzzz\
1 number\
2 number\
3 number\
4 number\
ppppppp