ループを使用して可変パターン間の線を抽出する方法

ループを使用して可変パターン間の線を抽出する方法

次のパターンのリストを含むCSVファイルがあります。

ファイル1:

aaa;bbb      
ccc;ddd
eee;fff
...

ファイル2:

aaa2222222222222222
3333333333333333333
4444444444444444444
bbb555555555555555
8888888888888888888
ccc5555555555555555
5555555555555555555
0000000000000000000
ddd6666666666666666

コマンド内のファイル1の各行に2つのパターン(例:&)を使用して、ファイル2の一致するパターン間の行を一致させ、印刷して出力を保存し、コマンドを次のパターンのペアに置き換えて繰り返すにはどうすればよいですか。aaa?プロセス?bbbsed -n '/aaa/,/bbb/p'

私の予想結果は

333333333333333         
444444444444444   

aaa&の間に行があるので、新しいファイルに保存します。bbb

cccddd次に、ループを使用して&などの間の次の行セットを見つけます。

ベストアンサー1

file1 または file2 に指定された重複またはネストされた範囲、または繰り返される開始/終了文字列がないと仮定すると、これはおそらくあなたが探しているものです。

$ cat tst.awk
BEGIN { FS=";" }

NR==FNR {
    begs2ends[$1] = $2
    next
}

end == "" {
    for ( beg in begs2ends ) {
        if ( index($0,beg) == 1 ) {
            end = begs2ends[beg]
            close(out)
            out = "out" (++cnt) ".txt"
            break
        }
    }
    next
}

{
    if ( index($0,end) == 1 ) {
        end = ""
    }
    else {
        print $0 " > " out
    }
}

$ awk -f tst.awk file1 file2
3333333333333333333 > out1.txt
4444444444444444444 > out1.txt
5555555555555555555 > out2.txt
0000000000000000000 > out2.txt

初期テストが完了したら、print $0 " > " out実際に別の出力ファイルを生成するように変更します。print > out

おすすめ記事