AWK | BASH,使用双FS和三元运算符

时间:2015-06-15 06:09:34

标签: bash awk

有可能吗?

我想知道该怎么做:

  1. 以逗号区分的计数字段。
  2. 仅获取上一步获得的第一个字段,计算按空格区分的字。
  3. 如果字数超过2个,请打印NF,否则为$0
  4. 输入

    cellular biol immunogenet, rosario
    escuela estadist, medellin
    medellin
    

    预期输出

    rosario
    escuela estadist, medellin
    medellin
    

2 个答案:

答案 0 :(得分:2)

您可以使用此awk命令

awk -F, '{if (split($1, a, " ") > 2) print $NF; else print}' file

这将输出

 rosario
escuela estadist, medellin
medellin

如果你想在$NF之前删除空格,请使用此awk命令

awk -F, '{if (split($1, a, " ") > 2) print substr($NF, 2); else print}' file

这将输出

rosario
escuela estadist, medellin
medellin

<强>解释

我们使用-F,将字段分隔符设置为逗号。

对于每一行,我们将第一个字段拆分为数组a,使用单个空格作为分隔符。我们检查返回值是否大于2(split函数返回元素数),然后打印substr($NF, 2),删除$NF开头的空格。否则,我们只使用print打印整行。

答案 1 :(得分:1)

awk -F, 'split($1,a,/ /) > 2 {$0=$NF} 1' input.txt

split($1,a,/ /)在正则表达式$1上拆分/ /并将其存储到数组a中。它返回数组的结果长度。

因此,如果将$1拆分为两个以上的字词,请将行$0更改为$NF

单独1是一种速记,可确保打印每一行。