大量のデータを含むデータセットがあります。
ID Number: A00001
Name: John Smith
Address: 123 Any Street
City: AnyTown
State: Ohio
Zip: 12345
ID Number: A00002
Name: Jane Doe
Address: 123 Any Street
City: AnyTown
State: Nebraska
Zip: 12346
ID Number: C00003
Name: Jim Shields
Address: 123 Any Street
City: AnyTown
State: Alaska
Zip: 12347
ID Number: D11111
Name: Mary Ellis
Address: 123 Any Street
City: AnyTown
State: Nevada
Zip: 12348
データを抽出して次のように分離したいと思います。
ID Number: A00001
Name: John Smith
Zip: 12345
=========================
ID Number: A00002
Name: Jane Doe
Zip: 12346
=========================
ID Number: C00003
Name: Jim Shields
Zip: 12347
=========================
ID Number: D11111
Name: Mary Ellis
Zip: 12348
=========================
私は見つけることができるすべてのgrepとegrepオプションを試しましたが、最も近い方法は各出力行の間に空白行(新しい行)を置くことです。
ベストアンサー1
grep
テキスト形式を再指定するツールではなく、パターンマッチングツールです。代わりにsed
、awk
または同じものを使用してくださいperl
。たとえば、
$ awk '/^(ID Number|Name|Zip):/;
/^[[:blank:]]*$/ { print "=========================" }'
ID Number: A00001
Name: John Smith
Zip: 12345
=========================
ID Number: A00002
Name: Jane Doe
Zip: 12346
=========================
ID Number: C00003
Name: Jim Shields
Zip: 12347
=========================
ID Number: D11111
Name: Mary Ellis
Zip: 12348
これは[[:blank:]]*
どの行にも一致しますバラより空いているようですが、実際にはスペースやタップのような横空間が入っていますが…目でしか見づらい部分なので思ったより一般的に発生します。
またはPerlを使用してください。
perl -l -n -e 'print if /^(ID Number|Name|Zip):/;
print "=" x 25 if /^\h*$/' input.txt
または、最初にPerl REの「水平空間」を理解するsed
GNU sedまたは他のsedがある場合:\h
sed -n -E -e '/^(ID Number|Name|Zip):/p; s/^\h*$/=========================/p' input.txt
それ以外の場合は sed を使用します。
sed -n -E -e '/^(ID Number|Name|Zip):/p; s/^[[:blank:]]*$/=========================/p' input.txt