development

여러 줄을 쉼표로 구분하여 한 줄로 바꾸기 (Perl / Sed / AWK)

big-blog 2020. 10. 13. 08:05
반응형

여러 줄을 쉼표로 구분하여 한 줄로 바꾸기 (Perl / Sed / AWK)


이 질문에 이미 답변이 있습니다.

여러 줄에 다음 데이터가 있습니다.

foo
bar
qux
zuu
sdf
sdfasdf

내가하고 싶은 것은 한 줄과 쉼표로 구분하여 변환하는 것입니다.

foo,bar,qux,zuu,sdf,sdfasdf

이를 수행하는 가장 좋은 유닉스 원 라이너는 무엇입니까?


붙여 넣기 명령 사용 :

paste -d, -s file

파일

aaa
bbb
ccc
ddd

xargs

cat file | xargs

결과

aaa bbb ccc ddd 

xargs improoved

cat file | xargs | sed -e 's/ /,/g'

결과

aaa,bbb,ccc,ddd 

xargs -a your_file | sed 's/ /,/g'

이것은 더 짧은 방법입니다.


달성 할 수있는 방법에는 여러 가지가 있습니다. 주로 사용하는 도구는 자신의 선호도 또는 경험에 따라 다릅니다.

tr 명령 사용 :

tr '\n' ',' < somefile

awk 사용 :

awk -F'\n' '{if(NR == 1) {printf $0} else {printf ","$0}}' somefile

입력 예제에 따라이 awk 줄이 작동합니다. (후행 쉼표 제외)

awk -vRS="" -vOFS=',' '$1=$1' file

테스트:

kent$  echo "foo
bar
qux
zuu
sdf
sdfasdf"|awk -vRS="" -vOFS=',' '$1=$1' 
foo,bar,qux,zuu,sdf,sdfasdf

Perl 한 줄짜리 :

perl -pe'chomp, s/$/,/ unless eof' file

또는 더 비밀스럽고 싶다면 :

perl '-peeof||chomp&&s/$/,/' file

sed -n 's/.*/&,/;H;$x;$s/,\n/,/g;$s/\n\(.*\)/\1/;$s/\(.*\),/\1/;$p'

perl -pi.bak -e 'unless(eof){s/\n/,/g}' your_file

그러면 확장자가 .bak 인 원본 파일의 백업이 생성 된 다음 원본 파일이 수정됩니다.

참고URL : https://stackoverflow.com/questions/15758814/turning-multiple-lines-into-one-line-with-comma-separated-perl-sed-awk

반응형