匹配时awk连接下一行

时间:2014-02-06 08:09:41

标签: regex linux bash shell awk

我使用awk来分析文本文件并将正则表达式的行连接到以下行。我使用以下命令:

awk '/^ [0-9]/{printf $0 ;next;}1' *filename*

当我从提示中测试它时,它按预期工作,但是当我在bash脚本中放入相同的命令时,输出与输入文件相同。

有关为什么这不适用于bash脚本的任何想法?

更新

这是完整的脚本:

#!/bin/bash
#

for FILE in $( ls *.raw )
do
    awk '/^ [0-9]/{printf $0 ;next;}1' FILE > temp
done

我尝试使用@Kent建议的awk '/pattern/{printf "%s",$0;next}1' file,但它只会在文件开头添加%s。

解决

我修改了命令,使用 getline 将匹配行与以下两行连接起来,如下所示:

(awk '/^ [0-9]/{l1=$0;getline;l2=(l1  $0);getline; print l2 $0}' < input_file) > output_file

1 个答案:

答案 0 :(得分:1)

我修改了命令,使用getline将匹配行与以下两行连接起来,如下所示:

(awk '/^ [0-9]/{l1=$0;getline;l2=(l1  $0);getline; print l2 $0}' < input_file) > output_file