0

有人可以帮助我使用 awk 进行解析吗?
抱歉,我没有任何代码我的输入空格分隔的文本文件(该文件在项目行中有更多字段)

category is fruits


item id  8837878
item id  8837879
item id  8837880
item id  8837881
item id  8837882
item id  8837883
item id  8837884
item id  8837885
item id  8837886
item id  8837887
item id  8837888
item id  8837889


category is veg

item id  8837890
item id  8837891
item id  8837892
item id  8837893
item id  8837894
item id  8837895
item id  8837896
item id  8837897

必需的制表符分隔的输出文件

fruits item id  8837878
fruits item id  8837879
fruits item id  8837880
fruits item id  8837881
fruits item id  8837882
fruits item id  8837883
fruits item id  8837884
fruits item id  8837885
fruits item id  8837886
fruits item id  8837887
fruits item id  8837888
fruits item id  8837889
veg item id  8837890
veg item id  8837891
veg item id  8837892
.....
4

2 回答 2

5

一种方法awk

$ awk '/^category/{c=$3}/^item/{print c,$0}' file
fruits item id  8837878
fruits item id  8837879
fruits item id  8837880
fruits item id  8837881
fruits item id  8837882
fruits item id  8837883
fruits item id  8837884
fruits item id  8837885
fruits item id  8837886
fruits item id  8837887
fruits item id  8837888
fruits item id  8837889
veg item id  8837890
veg item id  8837891
veg item id  8837892
veg item id  8837893
veg item id  8837894
veg item id  8837895
veg item id  8837896
veg item id  8837897

要完全按照您的需要格式化输出,您可以使用printf

$ awk '/^category/{c=$3}/^item/{printf "%s %s %s %d\n",c,$1,$2,$3}' file

所以通过制表符分隔的输出也许你的意思是:

$ awk '/^category/{c=$3}/^item/{printf "%s %s %s\t%d\n",c,$1,$2,$3}' file
于 2013-08-16T11:58:05.780 回答
3

这是一个尝试:

如果一行在第二个字段中包含“is”,那么我们存储类别名称,打印一个空行并继续检查文件。

在其余情况下,如果第二个字段是“id”,我们打印类别名称前面的行。

$ awk '$2=="is"{c=$3; print ""}$2=="id"{print c,$0}' file

fruits item id  8837878
fruits item id  8837879
fruits item id  8837880
fruits item id  8837881
fruits item id  8837882
fruits item id  8837883
fruits item id  8837884
fruits item id  8837885
fruits item id  8837886
fruits item id  8837887
fruits item id  8837888
fruits item id  8837889

veg item id  8837890
veg item id  8837891
veg item id  8837892
veg item id  8837893
veg item id  8837894
veg item id  8837895
veg item id  8837896
veg item id  8837897
于 2013-08-16T11:57:32.210 回答