如何使用awk打印文件第二行的字段



我有一个文件,如下所示:

measured      10.8       0.0000    0.0000    0.0236    0.0304    0.0383    0.0433    0.0437    0.0442    0.0452
0.0455    0.0448    0.0440    0.0423    0.0386    0.0344    0.0274    0.0000    0.0000

我想gawk把所有的数字都打印在一个长长的单列中,就像这样:

0.0000
0.0000
0.0236
0.0304
0.0383
0.0433
0.0437
0.0442
0.0452
0.0455
0.0448
0.0440
0.0423
0.0386
0.0344
0.0274
0.0000
0.0000

我运行命令gawk '/measured/ { printf $3"n" $4"n" $5"n" $6"n" $7"n" $8"n" $9"n" $10"n" $11"n" $12"n" $13"n" $14"n" $15"n" $16"n" $17"n" $18"n" }' filename.txt

但我只得到第一排数字:

0.0000
0.0000
0.0236
0.0304
0.0383
0.0433
0.0437
0.0442
0.0452

我如何才能呆呆地打印第二行?

$ cat tst.awk
BEGIN { OFS = "n" }
/measured/ { c=2; $1=$2=""; $0=$0 }
c && c-- { $1=$1; print }

$ awk -f tst.awk file
0.0000
0.0000
0.0236
0.0304
0.0383
0.0433
0.0437
0.0442
0.0452
0.0455
0.0448
0.0440
0.0423
0.0386
0.0344
0.0274
0.0000
0.0000

$ grep -A1 measured file | tr -s ' ' \n | tail -n+4
0.0000
0.0000
0.0236
0.0304
0.0383
0.0433
0.0437
0.0442
0.0452
0.0455
0.0448
0.0440
0.0423
0.0386
0.0344
0.0274
0.0000
0.0000

awk

$ awk -v OFS='n' '/measured/ {p=1; for(i=3;i<=NF;i++) print $i; next}
p {$1=$1; print; exit}' file

如果字段的数量保证如示例所示,则可以使用以下命令:

awk '{for(i=NF-8;i<=NF;i++){print $i}}' input.file

Awk的GNU实现允许任意正则表达式作为RS记录分隔符如果关键字measured出现在每批数字之前,我们可以使用该关键字作为分隔符:

$ gawk 'BEGIN { RS = "measured" } { for (i = 1; i <= NF ; i++) print "field " i " = " $i }'
measured      10.8       0.0000    0.0000    0.0236    0.0304    0.0383    0.0433    0.0437    0.0442    0.0452
0.0455    0.0448    0.0440    0.0423    0.0386    0.0344    0.0274    0.0000    0.000
field 1 = 10.8
field 2 = 0.0000
field 3 = 0.0000
field 4 = 0.0236
field 5 = 0.0304
field 6 = 0.0383
field 7 = 0.0433
field 8 = 0.0437
field 9 = 0.0442
field 10 = 0.0452
field 11 = 0.0455
field 12 = 0.0448
field 13 = 0.0440
field 14 = 0.0423
field 15 = 0.0386
field 16 = 0.0344
field 17 = 0.0274
field 18 = 0.0000
field 19 = 0.000

正如您所看到的,measured记录分隔符之间的所有字段都会被解析出来,而不考虑换行符。字段在任何空格、制表符和换行符的混合体上都是分隔的。

注意,因为measured首先出现,所以我们得到一个空记录。您在上面看到的输出实际上来自第二条记录。第一条记录是measured之前的whitespcae,它不包含任何字段。

换言之,唱片分隔符真的被认为是一个终结者,只是它可能会在最后一张唱片之后丢失。

最新更新