각 줄의 세 번째 쉼표를 개행 문자로 바꿉니다.

각 줄의 세 번째 쉼표를 개행 문자로 바꿉니다.

나는 네 부분으로 구성된 매우 긴 ID를 가지고 있습니다.

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

새 줄에 숫자를 넣고 세 번째 쉼표를 제거하고 싶습니다.

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"입력 파일을 한 줄씩 읽고 주어진 스크립트를 적용한 후 각 줄을 인쇄한다 -e"는 의미입니다. 는 대체 연산자이며 로 s/foo/bar/대체됩니다 . 여기서는 줄 끝( )까지 쉼표와 하나 이상의 쉼표가 아닌 문자( )가 일치합니다 . 주변 괄호는 일치하는 모든 것을 "캡처"하므로 이를 연산자의 오른쪽에 있는 것으로 참조할 수 있습니다 . 따라서 이것은 마지막 쉼표 뒤의 텍스트를 개행 문자로 바꾼 다음 일치하는 텍스트, 또 다른 개행 문자로 바꿉니다.foobar[^,]+$([^,]+)$1

세 번째 쉼표가 마지막 쉼표인지 확실하지 않은 경우 다음을 수행할 수 있습니다.

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}'

관련 정보