如何在 awk 中使用字段分隔符并忽略行而无需管道?

如何在 awk 中使用字段分隔符并忽略行而无需管道?

是否可以删除这一行中的 cut 命令,而不用管道传输到另一个命令?

awk 'NR > 1 {print l}{l=$2}' filename | cut -d':' -f2


详细信息,如果您想要或需要的话:

[这是一个兴趣问题而不是必要问题 - 我可以/确实使用cut上面的方法来轻松完成工作]

我能够获得第二列,同时忽略文件的最后一行NR > 1{print l}{l=$2}

基本上它是一个平面文件数据库(注意最后一行非数据内容),我需要每个值field1

$ cat file
1    field1:value1    field2:value2    ...
                   .
                   .
                   .
N    field1:value1    field2:value2    ...
other.parseable info.that is.unnecessary to.me

尝试该-F标志不起作用,因为它似乎更改了列号,因为它首先执行“剪切”:

$ awk -F ':' 'NR > 1 {print l}{l=$2}' file
value1   field2
value1   field2
...

答案1

您可以使用split的功能awk

awk '{ split($2, var, /:/ ); print var[2] }'

或者使用多个分隔符:

awk -F'[ :]+' '{print $3}'

相关内容