awkを使用して複数行のマッチングと置換を実行するには?

awkを使用して複数行のマッチングと置換を実行するには?

テキストファイル内の各行の末尾の末尾のスペースを無視し、行が数字で終わらない場合は、その行と次の行の間に改行があると仮定して、これらの改行を探したいと思います。次にそれを1行にリンクします。例えば

line 1
li
ne 2

2行目と3行目の間に改行文字があります。ファイルを次のように変更する必要があります。

line 1
line 2

これらの改行文字を見つけるには、複数行の一致を実行する必要があります。レコード区切り文字を変更してこれを実行しましたが、以下は機能しません。

$ awk 'BEGIN{RS="";}; { if (match($0, /[^[:digit:] ] *\n/)) print $0;} ' inputfile

改行で区切られた2行を接続するにはまだ疑問に思っています。

ありがとうございます。

ベストアンサー1

私は別の方法で問題を解決します:「行末の条件」が見つかるまで入力を繰り返します。

awk '{ 
       line=$0; 
       while($0 !~ /[[:digit:]] *$/ && getline > 0) { 
         line=line$0; 
       }
       print line
     }' < input

拡張入力フ​​ァイルから:

line 1
li
ne 2
li
ne 
number 3
line 4

またはさらに詳しく説明すると、次のようになります(末尾の空白の確認)。

$ cat -e input
line 1$
li$
ne 2$
li$
ne $
number 3$
line 4$

出力は次のとおりです

line 1
line 2
line number 3
line 4

おすすめ記事