一部の文字列を前の行の値に置き換える

一部の文字列を前の行の値に置き換える

次のテキストがあります。

Source IP,URL
1.1.1.1,example1.com
Blank,example2.com
2.2.2.2,example3.com
Blank,example4.com
Blank,example5.com
Blank,example6.com
Blank,example7.com
7.7.7.7,example8.com
Blank,example9.com
Blank,example10.com

「空白」を上記の空白以外の値に置き換えて次の出力を取得するにはどうすればよいですか?

Source IP,URL
1.1.1.1,example1.com
1.1.1.1,example2.com
2.2.2.2,example3.com
2.2.2.2,example4.com
2.2.2.2,example5.com
2.2.2.2,example6.com
2.2.2.2,example7.com
7.7.7.7,example8.com
7.7.7.7,example9.com
7.7.7.7,example10.com

ベストアンサー1

Perlソリューションは次のとおりです。

perl -pe ' $prev=$1 if /^([\d\.]+)/; s/Blank/$prev/' file.txt

説明する:

  • Perlの-pフラグは、「入力ファイルを1行ずつ見て各行を印刷する」という意味であり、-eこれは「コマンドラインに提供されたスクリプトを実行する」という意味です。

  • $prev=$1 if /^([\d\.]+)/;:行が(^)数字文字列(\d)と点で始まる場合、\.その文字列(IP)はとして保存されます$prev。したがって、スクリプトがファイルを読み取ったときに$prev最後に見つかったIPが含まれます。

  • s/Blank/$prev/Blank:文字列をで置き換える値$prev

おすすめ記事