次のテキストがあります。
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
。