有人可以帮助我使用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
.....
答案 0 :(得分: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
答案 1 :(得分:3)
这是一次尝试:
如果第二个字段中的某行包含“是”,则我们存储类别名称,打印空行并继续检查文件。
在其他情况下,如果第二个字段为“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