当前位置: 技术问答>linux和unix
求教,关于AWK把多行合成一行的问题
来源: 互联网 发布时间:2016-07-04
本文导语: 有个文本比较大 是数据库导出的TXT 具体格式是 1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 3 xxxxx 4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 5 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 6 xxxxx 7 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 8 xxx...
有个文本比较大 是数据库导出的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怎么写啊
具体格式是
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怎么写啊
|
awk '{if (NR % 3) printf $0 ; else print $0}'
|
NR是行号 这下你明白了吧!
|
windows上是gawk,并且要用双引号,具体如下:
假设处理的文件为srcfile.txt,处理完成后的目标文件为dstfile.txt,则执行
gawk "{if (NR % 3) printf $0 ; else print $0}" srcfile.txt > dstfile.txt
假设处理的文件为srcfile.txt,处理完成后的目标文件为dstfile.txt,则执行
gawk "{if (NR % 3) printf $0 ; else print $0}" srcfile.txt > dstfile.txt
|
您说对了,的确测试过!
|
嗯,不错,学习了,看来区别在printf 和print上
echo -e 'line1nline2nline3nline4nline5nline6' | awk '{if(0 == NR % 3) printf("%sn", $0); else printf("%s",$0) }'
|
您测试过了?