printf 'abc\npqrs\nxyz\n' | awk $'{ print "\'" $0 "\'" ,sep="," ,ORS=""}'
산출:'abc' , 'pqrs' , 'xyz' ,
예상 출력: 쉼표(,)의 마지막/끝을 제거하고 공백을 제거합니다.
답변1
awk를 사용하고 한 번에 한 줄의 입력만 메모리에 저장하십시오.
$ printf 'abc\npqrs\nxyz\n' |
awk '{printf "%s\047%s\047", sep, $0; sep=","} END{print ""}'
'abc','pqrs','xyz'
위 코드는 입력 줄이 비어 있어도 계속 작동합니다.
$ printf 'abc\n\npqrs\nxyz\n' |
awk '{printf "%s\047%s\047", sep, $0; sep=","} END{print ""}'
'abc','','pqrs','xyz'
답변2
다음에서는 올바르게 인용된 CSV 행이 필요하다고 가정하고 데이터에 작은따옴표나 쉼표가 포함될 수 있다는 점을 고려합니다.
csvformat -d $'\n' -Q "'" -U1 | paste -d, -s -
csvformat
CSV 인식 도구를 사용합니다.csvkit데이터의 형식을 적절하게 지정하고, 작은따옴표를 인용 문자로 사용하고, 인용이 필요하지 않은 필드도 포함하여 모든 필드를 인용하십시오( -U1
인용이 필요한 필드만 인용하려면 제거). 줄은 줄 바꿈으로 구분된 단일 필드로 읽혀집니다.
그런 다음 이 paste
유틸리티를 사용하여 필드를 쉼표로 구분하는 단일 행으로 데이터를 재구성합니다.
시험:
$ printf '%s\n' "It's the first" "The middle" "And, the last" | csvformat -d $'\n' -Q "'" -U1 | paste -d, -s -
'It''s the first','The middle','And, the last'
답변3
xargs
버퍼를 오버플로하지 않을 만큼 충분히 작은 입력의 경우 다음은 awk
제안되지 않습니다.
printf 'abc\npqrs\nxyz\n' | xargs | sed -e "s/ /','/g" -e "s/\(.*\)/'\1'/"
산출
'abc','pqrs','xyz'
필수 awk
버전 입니다
printf 'abc\npqrs\nxyz\n' |
awk "END {printf \"'\\n\"} NR==1 {printf \"'%s\", \$0} NR>1 {printf \"','%s\", \$0}"
산출
'abc','pqrs','xyz'
답변4
awk를 사용하는 더 간단한 솔루션:
$ printf 'abc\npqrs\nxyz\n' |
awk 'BEGIN{q="\047"} { printf c q "%s" q , $0 ; c=","}END{print "" }'
'abc','pqrs','xyz'