将两个 awk 命令合二为一

Combine two awk commands into one

如何将最后两个 awk 命令合并为一个。

cut -d':' -f1,2,3,4,5 /etc/passwd |awk -F: '{print ,}' |awk 'NF>=4'

我看到了这个问题,但我不知道如何将它应用到这个问题上。

Combine two AWK commands

这个有用吗:

cut -d':' -f1,2,3,4,5 /etc/passwd|awk -F: '
   {split(, a, " "); split(, b, " ");} 
   length(a) + length(b) >= 4 { print , }'

或者根据@shellter 只是:

awk -F: '{split(, a, " "); split(, b, " ");}
         length(a) + length(b) >= 4 { print , }' /etc/passwd

由于拆分了 returns 个拆分项,我们可以进一步简化:

awk -F: 'split(" ", a, " ") >=4 {print , }' /etc/passwd

这是您的命令的作用。

  1. /etc/passwd中的前五个字段:
  2. 然后使用字段5和字段1分隔:
  3. 测试是否大于或等于由 space 分隔的 4 个字段。

我会这样做:

awk -F: '{[=10=]=" "} split([=10=],a," ")>3' /etc/passwd

-F: 将字段分隔符设置为 :
[=19=]=" " 使用字段 51
重新创建行 split([=22=],a," ") 使用 space 拆分行,拆分的输出是字段数。
split([=23=],a," ")>3 测试是否有超过 3 个字段。 (我们也可以使用 >=4