텍스트를 변환하는 방법
St1
number1
1234
St2
number2
456
다음으로 가세요?
st1,number1,1234
st2,number2,1234
답변1
와 함께표준 paste
명령:
$ paste -sd ',,\n\0' file
St1,number1,1234
St2,number2,456
s
연속된 paste
라인, ,file
,
,
새로운 팀,아무것도 없다(생각하는 것처럼 NUL 문자가 아님)은 d
구분 기호 역할을 합니다.
또는:
$ paste -d ',,\0' - - - - < file
St1,number1,1234
St2,number2,456
paste
s stdin 4 번 ,
, ,
그리고아무것도 없다d
그들 사이의 구분자 로 .
답변2
펄 방식:
$ perl -00 -ne 'print join(",",split(/\n/)) . "\n"; ' file
St1,number1,1234
St2,number2,456
-00
Perl의 "단락 모드"를 켭니다 . 여기서 "줄"은 로 정의되므로 \n\n
각 단락은 단일 "줄"로 처리됩니다. -n
"입력 파일을 한 줄씩 읽고 주어진 스크립트를 각 줄에 적용합니다. 스크립트는 -e
입력 줄을 (새 줄: 줄 끝 문자)로 분할한 다음 결과 요소를 연결하는 데 사용됩니다. 이것은 모두 인쇄됩니다 . 후행 개행 문자와 함께.\n
,
명확성을 위해 다음과 같이 작성할 수 있습니다.
$ perl -00 -ne '@fields=split(/\n/); $out=join(",",@fields); print "$out\n" ' file
St1,number1,1234
St2,number2,456
아니면 그냥 재미로 이렇게 해보세요.
$ perl -00 -pe '$_=join(",",split(/\n/))."\n";' file
St1,number1,1234
St2,number2,456
답변3
노력하다 awk
:
awk '$1=$1' OFS=, RS= file
St1,number1,1234
St2,number2,456
빈 레코드 구분 기호의 대상은 RS
"빈 줄"이며 필드(여기서는 $1
) 를 할당하면 awk
필드의 전체 레코드를 재그룹화하는 데 사용할 수 있습니다 OFS
. $1
0 또는 NULL/비어 있지 않은 것으로 가정됩니다 .
답변4
Perl에서 단락 모드(-00) 사용:
perl -pals -F'\n' -00e 's/.*/@F/s' -- -\"=, file
Perl 프로그레시브 모드:
perl -pe '
chomp($_.=<>.<>),tr/\n/,/ if/./;
eof && s/.\K$/\n/;
' file
POSIXly sed:
sed '
/./{H;$!d;}
x;y/\n/,/;s/.//
' file
GNU csplit + xargs paste
파이프를 사용하여 이를 수행 할 수 있습니다 .
csplit --suppress-matched -sz file '/^$/' '{*}'
printf '%s\n' xx* | xargs -r paste -sd,
Python에서 모듈 groupby
메서드 및 목록 이해 사용 itertools
:
python3 -c 'import sys, itertools as it
ofs,(rs,ors) = ",","\n" * 2
g = lambda x: not len(x)
h = lambda x: x.rstrip(rs)
with open(sys.argv[1]) as f:
print(*[ofs.join(igrp) for k,igrp in it.groupby(map(h,f),g) if not k],sep=ors)
' file
산출:-
St1,number1,1234
St2,number2,456