次のような文字列を除外できるフィルターを作成する必要があります。
- 3文字未満
- 数字または記号を含む (つまり、ラテン アルファベットの項目ではないもの)
例: 入力ファイル:
5-hydroxy-3-methylglutaryl-coenzyme_a_reductase
5-hydroxytryptamine
a
a
a
aa
abaca
abo_antibodies
abradant
abrasive
出力ファイル:
abaca
abradant
abrasive
私はgrepオプションを見てきました:
grep -v [itemtoremove] [inputfile] > [outputfile]
これはトリックを行うようです。ただし、各項目を個別に削除するだけなので、ファイルから必要なものをすべて削除するには、このスクリプトを継続的に実行する必要があります。
1つのgrep(または他のより効率的なコマンドライン)で必要なものすべてをフィルタリングできるように、誰かが解決策を持っていますか?
更新された質問
以下に、問題を解決する優れたソリューションがいくつかあります。
ただし、4つのタブ区切りの列を持つ入力ファイルにも同じことを適用したいと思います。
私は次の変更を試みました:
grep '^[a-z][a-z][a-z][a-z]-n$' input
入力は次のようになりました。
a-n such_as-handheld-n 6.4623 A
abaca-n such_as-head-n 2.5586 A
abo_antibodies-n such_as-headphone-n 8.0794 A
abrasive-n such_as-healthcare-n 5.2845 A
function-n such_as-hearing-n 9.5367 A
次の出力が必要です。
abaca-n such_as-head-n 2.5586 A
abrasive-n such_as-healthcare-n 5.2845 A
function-n such_as-hearing-n 9.5367 A
変更された grep のどこが間違っているかを誰かに教えてもらえますか? 空のファイルが出力されます。ありがとう!