web-dev-qa-db-ja.com

Linux:テキストファイルからのデータ抽出

何千ものデータがあるテキストファイルがあります。例えば。

id=row_value
profile=row_value
name=row_value
email=row_value
address=row_value

id=row_value2
profile=row_value2
name=row_value2
email=row_value2
address=row_value2

.       .       .
.       .       .
.       .       .

そのファイルからすべてのnameemailを抽出したい。例えば。

name=row_value
email=row_value

name=row_value2
email=row_value2

.       .       .
.       .       .
.       .       .

注:nameemailの各ペアの後の新しい行に注意してください。

grepsedawkなどの一部のLinuxコマンドで実行されることはわかっています。LinuxコマンドのNoobです。

1
Sohan Patel

これを試して

grep "name\|email" <Path to your File> 
4
Ruediger

良心をきれいに保つために、ここにawkバージョンがあります:

$ awk '$0~/name/||/email/ {if ($0~/email/) $3="\n"; print $0}' testerfile.txt 
name=row_value
email=row_value  

name=row_value2
email=row_value2  

そして、これはドットを追加します:

awk '$0~/name/||/email/ {if ($0~/email/) $3="\n"; print $0}; $0~/^.[[:blank:]].[[:blank:]]./ {print} ' testerfile.txt

出力:

$awk '$0~/name/||/email/ {if ($0~/email/) $3="\n"; print $0}; $0~/^.[[:blank:]].[[:blank:]]./ {print} ' testerfile.txt 
name=row_value
email=row_value  

name=row_value2
email=row_value2  

.       .       .
.       .       .
.       .       .

最初のバージョンのはるかに単純なバージョン:

awk '/^name/; /^email/ {$3="\n"; print}' testerfile.txt

アンカーされた正規表現は、テキスト内の他の場所で、行の先頭でのみ「名前」および「電子メール」という単語を見つけることを防ぎます

0