首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用awk格式化输出文件

如何使用awk格式化输出文件
EN

Stack Overflow用户
提问于 2018-06-02 07:21:23
回答 4查看 66关注 0票数 1

我从一个shell脚本得到了以下格式的输出文件

data  text1

data1 text2

data3 text4,text5,text6,text7,text8,text9,text10,text12,text11,text13

data4 text53

data23 text45,text65,text98,text65`

我想进一步更改输出的格式,如下所示,以使其更具可读性

data   text1

data1  text2

data3  text4

data3  text5

data3  text6

data3  text7

data3  text8

data3  text9

data3  text10

data4  text53

data23 text45

data23 text65

data23 text98

data23 text65

请建议如何使用awk/sed实现相同的功能?尝试查找awk命令,但没有得到任何线索,如有任何帮助将不胜感激

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-02 22:51:46

$ awk -F'[ ,]+' '{for (i=2;i<=NF;i++) print $1, $i ORS}' file
data text1

data1 text2

data3 text4

data3 text5

data3 text6

data3 text7

data3 text8

data3 text9

data3 text10

data3 text12

data3 text11

data3 text13

data4 text53

data23 text45

data23 text65

data23 text98

data23 text65
票数 1
EN

Stack Overflow用户

发布于 2018-06-02 07:43:54

您可以使用类似以下内容:

output | gawk '{split($2, a, /,/); for (i=1; i <= length(a); i++) {printf "%s %s\n\n", $1, a[i]}}'

其中output是脚本生成的输出。

或者,您可以像这样运行它:

gawk '{split($2, a, /,/); for (i=1; i <= length(a); i++) {printf "%s %s\n\n", $1, a[i]}}' output_file

编辑以修复@Ed Morton指出的错误,并将awk替换为gawk,因为length(array)是一个GNU扩展。

票数 1
EN

Stack Overflow用户

发布于 2018-06-02 14:15:02

另一个是使用gsub连接到,

$ awk '{gsub(/,/, ORS ORS $1 OFS )}1' file
...
data3 text4

data3 text5

data3 text6
...

但是,例如,如果$1中包含&,则会出现问题,因为它会被替换为匹配项:

$ cat file
data& text4,text5,text6
$ awk '{gsub(/,/, ORS ORS $1 OFS )}1' file
data& text4

data, text5

data, text6

用另一个gsub修复这个问题

$ awk '{gsub(/,/, ORS ORS $1 OFS ); gsub(/,/,"\\&")}1' file
data& text4

data& text5

data& text6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50652067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档