求教,关于AWK把多行合成一行的问题

allrun1982 2009-09-23 11:02:52
有个文本比较大 是数据库导出的TXT
具体格式是

1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3 xxxxx
4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
6 xxxxx
7 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
8 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
9 xxxxx
10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
12 xxxxx

1~3行为一条记录,4~6行为一条记录,以此类推,
怎么用AWK把每三行合成一行记录输出 第二行和第三行开头字符可能是任何字符或者是@

本人是WINDOWS系统环境,只不过有个GAWK工具可以用,SED用不了。
求教这个AWK怎么写啊
...全文
580 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
netxuning 2009-09-24
  • 打赏
  • 举报
回复
嗯,不错,学习了,看来区别在printf 和print上


echo -e 'line1\nline2\nline3\nline4\nline5\nline6' | awk '{if(0 == NR % 3) printf("%s\n", $0); else printf("%s",$0) }'
iisbsd 2009-09-23
  • 打赏
  • 举报
回复
awk '{if (NR % 3) printf $0 ; else print $0}'
superever 2009-09-23
  • 打赏
  • 举报
回复
您说对了,的确测试过!
XyRbj 2009-09-23
  • 打赏
  • 举报
回复
您测试过了?
superever 2009-09-23
  • 打赏
  • 举报
回复
windows上是gawk,并且要用双引号,具体如下:
假设处理的文件为srcfile.txt,处理完成后的目标文件为dstfile.txt,则执行
gawk "{if (NR % 3) printf $0 ; else print $0}" srcfile.txt > dstfile.txt
steptodream 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 allrun1982 的回复:]
一楼的兄弟  麻烦给我解释下好么 (NR % 3) 什么意思啊
[/Quote]
NR是行号 这下你明白了吧!
allrun1982 2009-09-23
  • 打赏
  • 举报
回复
一楼的兄弟 麻烦给我解释下好么 (NR % 3) 什么意思啊

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧