下面是我的测试文件。
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