AWK를 사용하여 구분 기호를 사용하여 줄 내용을 여러 줄로 분할하는 방법

AWK를 사용하여 구분 기호를 사용하여 줄 내용을 여러 줄로 분할하는 방법

다음과 같은 입력이 주어졌습니다.

field1,field2,field3,field4

나는 이런 출력을 얻고 싶다

field1
field2
field3
field4

awk를 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

Awk의 관용적 방법은 다음과 같습니다.

awk 'BEGIN{FS=","; OFS="\n"} {$1=$1} 1'

또는 동등하게

awk '{$1=$1} 1' FS=, OFS='\n'

새로운 구분 기호를 사용하여 레코드를 강제 {$1=$1}로 재평가 OFS하고 1기본 print작업을 트리거합니다. 원하는 경우 다른 표현(예: NF += 0)을 사용하여 재평가를 강제할 수 있습니다. 이는 선호 사항의 문제입니다.

빠르고 더러운 방법은

awk -vRS=, 1

(또는 awk 1 RS=,) 쉼표로 구분된 각 단어를 완전한 레코드로 처리하고 기본 개행 레코드 구분 기호를 사용하여 출력합니다.

답변2

사용쉼표를 개행 문자로 변환합니다.

echo "field1,field2,field3,field4" | tr "," "\n"

이것은 아마도 를 사용하는 것보다 빠르지만 awk, 원한다면 다음과 같이 할 수 있습니다:

echo "field1,field2,field3,field4" | awk '{gsub(",","\n");print}'

~에서GNU awk 문서:

gsub(정규식, 바꾸기[, 대상])

찾을 수 있는 가장 길고, 가장 왼쪽에 있으며, 겹치지 않는 일치하는 모든 하위 문자열을 대상에서 검색하고 이를 대체 문자열로 바꿉니다. gsub()의 "g"는 "global"을 의미하며 모든 곳에서 대체를 의미합니다.

답변3

사용 bashcsvformat에서csvkit필드 구분 기호를 쉼표에서 줄 바꿈 세트로 변경합니다.

$ csvformat -D $'\n' file
field1
field2
field3
field4

이는 입력 fileCSV가 올바른 형식이라고 가정합니다. 또한 포함된 쉼표를 올바르게 처리합니다.

$ cat file
"field,1",field2,field3,field4
$ csvformat -D $'\n' file
field,1
field2
field3
field4

관련 정보