在包含多个字段的行中,为每个字段创建一个新行,并从旧行中删除该字段

在包含多个字段的行中,为每个字段创建一个新行,并从旧行中删除该字段

我有一个如下所示的文件:

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 中:

$ 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

相关内容