csvから配列列を切り取る

csvから配列列を切り取る

CSVファイルから配列列を切り取りたいです。たとえば、次のCSVファイルが表示された場合

入力.csv

1,2,"{1,2,3}",1

3,4,"{3,9,1}",2

8,9,"{10,12,30}",3

私が望む出力は

出力.csv

1,2,3

3,9,1

10,12,30

私は試してみましたが、cut -d , -f 3 input.csv どちらcut -d { -f 3 input.csvも動作しませんでした。助けてくれてありがとう。よろしくお願いします。

答え1

awkを使用して複数のフィールド区切り文字を定義できるため、2-F'[]'つの中括弧を区切り文字として定義して2番目のフィールドを印刷できます。

awk -F'[{}]' '{print $2}' input.csv
1,2,3
3,9,1
10,12,30

答え2

$ cat input.csv
1,2,"{1,2,3}",1
3,4,"{3,9,1}",2
8,9,"{10,12,30}",3

$ sed -E 's/^([^,],){2}"\{([^}]+).*/\2/' input.csv
1,2,3
3,9,1
10,12,30
  • 一部のバージョンは拡張正規表現の代わりに使用さsedれます。-r-E
  • ^([^,],){2}最初の2列
  • "\{"{3番目の列は一致しますが、キャプチャされませんでした。
  • ([^}]+)}文字キャプチャ
  • .*残りの行
  • 行全体を目的の文字列に置き換えます。


そしてgreppcre

$ grep -oP '^([^,],){2}"\{\K[^}]+' input.csv 
1,2,3
3,9,1
10,12,30

関連情報