如何限制awk的字段数量?

如何限制awk的字段数量?

下面是我的测试文件。

aa, bb, cc
dd, ee
ff, gg, hh

是否可以认为awk每个记录只有 2 个字段,并且记录分隔符是第一个字段,?因此,在我的示例中,$2每条记录的值为:

bb, cc
ee
gg, hh

答案1

通过下面的方法完成并且效果很好

从上面的问题我明白它应该只考虑 $2 和 $3 作为 $2

命令

awk -F " " '{$2=$2$3;print $1,$2}' filename

答案2

您可以Perl通过指定要将当前记录拆分为的字段数来实现此目的。在你的情况下是2。

该选项将使用逗号作为分隔符-F将当前记录分成两个字段。$_

$ perl -F'/,/,$_,2' -lane '
    print "\$0=<<$_>>";
    print "\$1=<<$F[0]>> \$2=<<$F[1]>>", "\n";
' file.csv

您还可以read通过给它两个参数来有效地使用 bash 的内置函数:

  while IFS=, read -r f1 f2; do
     # $1 = f1 $2 = f2
  done < file.csv 

答案3

$2是的,如果您将之后的所有字段都塞进中,您就可以做到这一点$2

awk '
  BEGIN{ FS=","; OFS=";" }
  {
    for(i=3; i<=NF; i++) {
      $2 = $2","$i
    }
  }
  { print $1,$2 }
 ' data.txt

会给你这些结果:

aa; bb, cc
dd; ee
ff; gg, hh

相关内容