以下は私のテストファイルです。
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です。
このオプションは、カンマを区切り文字として使用して、現在のレコードを2つのフィールドに分割します-F
。$_
$ perl -F'/,/,$_,2' -lane '
print "\$0=<<$_>>";
print "\$1=<<$F[0]>> \$2=<<$F[1]>>", "\n";
' file.csv
read
2つの引数を提供することで、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