
나는 네 부분으로 구성된 매우 긴 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/
대체됩니다 . 여기서는 줄 끝( )까지 쉼표와 하나 이상의 쉼표가 아닌 문자( )가 일치합니다 . 주변 괄호는 일치하는 모든 것을 "캡처"하므로 이를 연산자의 오른쪽에 있는 것으로 참조할 수 있습니다 . 따라서 이것은 마지막 쉼표 뒤의 텍스트를 개행 문자로 바꾼 다음 일치하는 텍스트, 또 다른 개행 문자로 바꿉니다.foo
bar
[^,]+
$
([^,]+)
$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}'