CSVの最初の要素と最後の要素を切り取る

CSVの最初の要素と最後の要素を切り取る

以下のようにCSVファイルに配列があります。

input.csv
"{1,2,3,4}"
"{1,2,3,4,5,6,7,8,9}"
"{34,6,7,89}"

このCSVファイルの最初の要素と最後の要素を別のCSVファイルにしたいと思います。

output.csv
    1,4
    1,9
    34,89

私は前に試しました

  cut -d , -f1 -- complement input.csv > output.csv

私はこれが一般的なCSVで動作することを知っています。しかし、ここには中かっこと「」もあります。

答え1

私はこれをします。sed

$ sed -r 's/"\{([0-9]+,).*,([0-9]+)\}"/\1\2/' input
1,4
1,9
34,89

ノート

  • -rEREを使用
  • \}言葉{
  • ([0-9]+,)後で使用できるように、数字の後にカンマを付けて保存してください。
  • \1\2保存されたスキーマへの逆参照

(あなたの出力はインデントされていますので、必要に応じて交換することもできます。/ \1\2/必要/\t\1\2/に応じて調整してください。)

答え2

一方通行:

awk -F"[}{,]" '{print $2, $(NF-1)}' OFS=,  file

中かっこを区切り文字として使用することもでき、要素に直接アクセスできます。

答え3

使用sed:

sed -e 's/,.*,/,/' -e 's/[^0-9,]//g' file

最初のsコマンドは、最初と最後のコンマの間のすべてをコンマで置き換え、それらの間のすべてを効果的に削除します。

2番目のsコマンドは、数字やカンマ以外のすべての文字を削除します。

答え4

sed -r "s/(\"|\{|\})//g" input.csv|awk -F, '{print $1","$NF}'

関連情報