我有一个结构文件
12312
desc: bleh...
9938
desc: blah...
desc: bloh...
desc: blih...
desc: bluh...
9912
desc: blah...
Run Code Online (Sandbox Code Playgroud)
我想移动匹配模式"desc:"的行到前一行或删除行中的'\n',它在每个模式"desc:"之前.
期望的输出:
12312 desc: bleh...
9938 desc: blah... desc: bloh... desc: blih... desc: bluh...
9912 desc: blah...
Run Code Online (Sandbox Code Playgroud)
我试过了
awk '!/desc:/{
printf "%s ",$0
getline
printf "%s \n",$0
}
/desc/{print}' file
Run Code Online (Sandbox Code Playgroud)
没有结果.
实际上所有的数据都是输出,awk -F\" '{print $4 "\t" $6}'
也许我可以先做点什么?
Chr*_*our 12
一种方式awk:
$ awk '!/^desc:/&&NR>1{print OFS}{printf "%s ",$0}END{print OFS}' file
12312 desc: bleh...
9938 desc: blah... desc: bloh... desc: blih... desc: bluh...
9912 desc: blah...
Run Code Online (Sandbox Code Playgroud)
说明:
!/^desc:/匹配不以desc:不包括文件中第一行开头的行NR>1.{print OFS}在匹配的行之前打印输出字段分隔符.在awk默认情况下OFS是\n.{printf "%s ",$0} 打印每一行没有尾随换行符. END{print OFS} 读取文件后添加尾随换行符. 现场演示:http://ideone.com/ajH14u
bar*_*mar 12
sed oneliner
sed ':a $!N;s/\ndesc/ desc/;ta P;D'
Run Code Online (Sandbox Code Playgroud)
会输出
12312 desc: bleh...
9938 desc: blah... desc: bloh... desc: blih... desc: bluh...
9912 desc: blah...
Run Code Online (Sandbox Code Playgroud)