![同じ文字列から行を抽出する](https://rvso.com/image/36017/%E5%90%8C%E3%81%98%E6%96%87%E5%AD%97%E5%88%97%E3%81%8B%E3%82%89%E8%A1%8C%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B%20.png)
次のような表があります:
そして、3列目の2つの文字列を含むファイル: apple potato
これを取得するには、ヘッダーと文字列appleとpotatoを含むすべての行を抽出したいと思います。
ありがとう
答え1
使用方法awk
:
awk 'FNR == 1 || /potato|apple/'
使用方法sed
:
sed -n '1p; /potato\|apple/p'
どちらの場合も、行番号 1 とそれに一致する行potato|apple
が印刷されます。
答え2
txt テーブルをプレーンテキストで再度示します。
A B C D E
21 63 apple yellow 5
23 69 lemon green 6
45 135 orange yellow 7
67 201 mango green 4
54 162 potato maroon 5
複雑さの少ない解決策を考えることはできますが、ちょっとハックっぽいと思います:-) テーブルtxtファイルが次のように呼ばれていると仮定します。table1
$ head -1 table1 && grep '\b\(potato\|apple\)\b' table1
これは最初の行を取得し、grep
それに結果を追加します。\b
は単語の境界です。したがって、これにより、「grapple (hook)」などの単語が除外されます :) もう 1 つのより複雑なソリューションでは、A、B、C... がタブで区切られていると想定します\t
。
$ grep '\(\b\(potato\|apple\)\b\|\([A-Z]\|\(\t\|\n?$\)\)\)' table1