使用 awk 每隔 N 行记录特定的列值
using awk to record certain column value every Nth row
我有一个包含 6 列的数十万行数据的文件。
具有数据的第一行从第 304 行开始。我正在寻找一个 'awk' 命令,它可以在每增加 243 行后为我提供第 2 列的值。因此,第一个值将是“第 304 行第 2 列”,第二个值将是“第 547 行第 2 列”,依此类推...
谢谢
使用 GNU awk,你可以做到这一点
awk 'NR==304 || NR==x{print ;x=NR+243}' input
输入:
$ paste <(seq 10000) <(seq 10000) > input
输出:
304
547
790
1033
1276
1519
1762
2005
2248
2491
2734
2977
3220
3463
3706
3949
4192
4435
4678
4921
读取的每一行都被分成字段:</code>是第 2 列</p>
<p><code>NR
是正在读取的行的当前行号。
试一试:
awk 'NR>=304 && !((NR-304)%243) { print ;}' file.txt
使用模运算符:
awk '! (FNR < 304 || (FNR-304) % 243) {print }' file
或者计数器变量:
awk '++c == 304 {print ; c -= 243}' file
我有一个包含 6 列的数十万行数据的文件。
具有数据的第一行从第 304 行开始。我正在寻找一个 'awk' 命令,它可以在每增加 243 行后为我提供第 2 列的值。因此,第一个值将是“第 304 行第 2 列”,第二个值将是“第 547 行第 2 列”,依此类推...
谢谢
使用 GNU awk,你可以做到这一点
awk 'NR==304 || NR==x{print ;x=NR+243}' input
输入:
$ paste <(seq 10000) <(seq 10000) > input
输出:
304
547
790
1033
1276
1519
1762
2005
2248
2491
2734
2977
3220
3463
3706
3949
4192
4435
4678
4921
读取的每一行都被分成字段:</code>是第 2 列</p>
<p><code>NR
是正在读取的行的当前行号。
试一试:
awk 'NR>=304 && !((NR-304)%243) { print ;}' file.txt
使用模运算符:
awk '! (FNR < 304 || (FNR-304) % 243) {print }' file
或者计数器变量:
awk '++c == 304 {print ; c -= 243}' file