各行の 3 番目のカンマを改行文字で置き換えます。

各行の 3 番目のカンマを改行文字で置き換えます。

私は4つの部分で構成される非常に長いIDを持っています。

AKJHGFGUIKL,OIUYT,KJHBTYUI,98765434567
RTYUIKHGFGH,TYUJI,TGHYJKJKLJKL,6789876
ETRYTUUI,YTYUIL,UIOKJHGFGH,34567898766

新しい行に数字を入れて3番目のカンマを削除したいです。

AKJHGFGUIKL,OIUYT,KJHBTYUI
98765434567

RTYUIKHGFGH,TYUJI,TGHYJKJKLJKL
6789876

ETRYTUUI,YTYUIL,UIOKJHGFGH
34567898766

どうすればいいですか?

答え1

GNUの使用sed:

sed "s/,/\n/3; G" file

ETRYTUUI,YTYUIL,UIOKJHGFGH
34567898766

説明する

答え2

awk -F, -vOFS=, '{print $1,$2,$3; print $4; print ""}' file

希望の出力を生成します

答え3

いくつかのPerlメソッド:

$ perl -pe 's/,([^,]+)$/\n$1\n/' file
AKJHGFGUIKL,OIUYT,KJHBTYUI
98765434567

RTYUIKHGFGH,TYUJI,TGHYJKJKLJKL
6789876

ETRYTUUI,YTYUIL,UIOKJHGFGH
34567898766

これは-p、「入力ファイルを1行ずつ読み、与えられたスクリプトを適用した後に各行を印刷する-e」という意味です。は代替演算子で、でs/foo/bar/置き換えられます。ここでは、行末()までのカンマと1つ以上の非カンマ文字()が一致します。周囲の括弧は一致するものすべてを「キャプチャ」するので、これを演算子の右側にあると参照できます。したがって、これは最後のコンマの後のテキストを改行文字に置き換え、次に一致するテキスト、別の改行文字に置き換えます。foobar[^,]+$([^,]+)$1

3番目のカンマが最後のコンマであるかどうかわからない場合は、次のことができます。

perl -pe 's/([^,]+,){3}\K(.+)/\n$2\n/' file

または

perl -pe 's/(.+?,.+?,.+?),(.+)/$1\n$2\n/' file

楽しみにいくつかをさらに紹介します。

perl -pe 's/([^,]+,){3}\K(.+)/\n$2\n/' file
perl -F, -pe '$k=pop(@F); $_=join(",", @F)."\n$k\n"' file
perl -F, -le 'print join ",", @F[0..2],"\n@F[3..$#F]\n"' file

答え4

awk -F, '{print $1, $2, $3,"\n"$4}'

関連情報