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で機能することはわかっていますが、ここには中括弧と「」もあります。
私はsed
でこのようにします
$ sed -r 's/"\{([0-9]+,).*,([0-9]+)\}"/\1\2/' input
1,4
1,9
34,89
-r
EREを使用する\}
リテラル{
([0-9]+,)
後で使用するためにいくつかの数字とそれに続くコンマを保存します\1\2
保存されたパターンへの逆参照(出力はインデントされているので、おそらく/ \1\2/
または/\t\1\2/
交換中-必要に応じて調整してください)
一方通行:
awk -F"[}{,]" '{print $2, $(NF-1)}' OFS=, file
中括弧は区切り文字としても使用できるため、要素に直接アクセスできます。
sed
の使用:
sed -e 's/,.*,/,/' -e 's/[^0-9,]//g' file
最初のs
コマンドは、最初と最後のコンマの間のすべてをコンマに置き換え、その間のすべてのコンテンツを効果的に削除します。
2番目のs
コマンドは、数字またはコンマではないすべての文字を削除します。
このコードはあなたのために働きます
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 " "
は、出力のスペースを削除します