多くのcsvファイルがあります。元のデザインには5つの列があるはずでした。
Csvファイルの中央の列に任意の数のコンマが含まれた文字列があり、適切に引用されていないことがわかりました。これは、任意の数の列を持つ行につながります。
これらのcsvファイルの最初の2列と最後の2列だけを取得するにはどうすればよいですか?
コンマの数は行ごとに変わる可能性があるため、最初の2列と最後の2列を指定する方法が必要です。
awk -F, '{print $1, $2, $(NF-1), $NF}' < input
より一般的に(質問のタイトルに従って)入力の最初と最後のn
列を印刷します-一部の列を2回印刷することを意味するかどうかを確認せずに-
awk -v n=2 '{
for(i=1; i <= n && i <= NF; i++)
printf "%s%s", $i, OFS
for(i=NF-n+1; i <= NF && i >= 1; i++)
printf "%s%s", $i, OFS
printf "%s", ORS
}' < input
(区切り文字に必要に応じて-F
を使用)
Perl:
echo a,b,X,X,X,X,c,d | Perl -F, -slane 'print join ",", @F[0..$n-1, -$n..-1]' -- -n=2
a,b,c,d
このsedも使えます
sed -E 's/(([^,]*,){2}).*((,[^,]*){2})/\1\3/;s/,,/,/'