awk를 사용하여 한 줄의 abc pqrs xyz를 한 줄의 'abc','pqrs','xyz'로 변환합니다.

awk를 사용하여 한 줄의 abc pqrs xyz를 한 줄의 'abc','pqrs','xyz'로 변환합니다.
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 -

csvformatCSV 인식 도구를 사용합니다.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'

관련 정보