web-dev-qa-db-ja.com

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で機能することはわかっていますが、ここには中括弧と「」もあります。

3
joker21

私は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/交換中-必要に応じて調整してください)

3
Zanna

一方通行:

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

中括弧は区切り文字としても使用できるため、要素に直接アクセスできます。

2
Guru

sedの使用:

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

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

2番目のsコマンドは、数字またはコンマではないすべての文字を削除します。

2
janos

このコードはあなたのために働きます

cat input.csv|sed 's/\"//g'|sed 's/{//g'|sed 's/}//g'|awk -F "," '{print $1,",",$NF}'|tr -d " " > output.csv

sed 's/\"//g'は "を削除し、sed 's/{//g'|sed 's/}//g'は中括弧を削除し、awk -F "," '{print $1,",",$NF}'はこの結果を提供します

1 , 4
1 , 9
34 , 89

tr -d " "は、出力のスペースを削除します

1
Dababi