首页 > 解决方案 > 如何打印必填字段

问题描述

输入线:

a b=34 c d="12 34 54" e f=387
a b=12 c z d="89 08 23" e f=321 g=12

我想打印两个字段 b 和 d。
所需的输出如下:

b=34 d="12 34 54"
b=12 d="89 08 23"

我试过了

awk '{print $2, $4}' filename

但这不会产生正确的输出。

标签: bashawk

解决方案


如果gawk4.0 或更高版本可用,如何使用FPAT
请试试:

gawk -v FPAT='[^ ]+|\\w+="[^"]+"' '
    {for (i=1; i<=NF; i++) if (match($i, "^(b|d)")) printf("%s ", $i); print ""}
' input.txt

输出:

b=34 d="12 34 54" 
b=12 d="89 08 23" 

FPAT,一个awk变量,是一个正则表达式来匹配每个字段的内容,而不是用字段分隔符来分割行。


推荐阅读