여러 필드가 있는 행에서 각 필드에 대해 새 행을 만들고 이전 행에서 필드를 제거합니다.

여러 필드가 있는 행에서 각 필드에 대해 새 행을 만들고 이전 행에서 필드를 제거합니다.

다음과 같은 파일이 있습니다.

elephant
kangaroo, snake, zebra
baboon
parrot, eagle, owl
...
...

각 행에 하나의 요소만 있도록 이 목록을 변경하고 싶습니다.

elephant
kangaroo
snake
zebra
baboon
parrot 
eagle
owl
...
...

awk에서 이 작업을 수행할 수 있는 방법이 있나요?

감사해요

답변1

이는 다양한 도구를 사용하여 쉽게 수행할 수 있습니다. 귀하 의 입력에 따라 모든 ,것을 \n.tr

$ tr ',' '\n' < file
elephant
kangaroo
 snake
 zebra
baboon
parrot
 eagle
 owl

이로 인해 추가 공간이 남지만.

awk(GNU ) 에서는 awk다음과 같이 할 수 있습니다:

$ awk '{gsub(", ","\n");}1' file
elephant
kangaroo
snake
zebra
baboon
parrot
eagle
owl

GNU에서 sed:

$ sed 's/, /\n/g' file
elephant
kangaroo
snake
zebra
baboon
parrot
eagle
owl

펄에서는:

$ perl -pe 's/, /\n/g' file
elephant
kangaroo
snake
zebra
baboon
parrot
eagle
owl

답변2

awk해결책을 찾는 데 관심이 있으십니까 ? sed예를 들어 다음과 같이 하면 쉽습니다.

$ cat foo
elephant
kangaroo, snake, zebra
baboon
parrot, eagle, owl
$ sed -e 's/, */\
/g' < foo
elephant
kangaroo
snake
zebra
baboon
parrot
eagle
owl

답변3

Python을 사용하여 완료:

#!/usr/bin/python
import re
k=open('p.txt','r')
for i in k:
    print re.sub(",","\n",i).strip().replace(" ","")

산출

elephant
kangaroo
snake
zebra
baboon
parrot
eagle
owl

관련 정보