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番目の列は一致しますが、キャプチャされませんでした。([^}]+)
非}
文字キャプチャ.*
残りの行- 行全体を目的の文字列に置き換えます。
そしてgrep
pcre
$ grep -oP '^([^,],){2}"\{\K[^}]+' input.csv
1,2,3
3,9,1
10,12,30