GNU/Linux >> Linux の 問題 >  >> Linux

一致の2番目と2番目の最後の発生の間のすべてを削除しますか?

フォーマットしたい文字列があります。 2番目の;の間のすべてを削除したい 最後から2番目の;

入力

cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Protostomia;Ecdysozoa;Panarthropoda;Arthropoda;Mandibulata;Pancrustacea;Hexapoda;Insecta;Dicondylia;Pterygota;Neoptera;Endopterygota;Coleoptera;Polyphaga;Cucujiformia;Tenebrionoidea;Tenebrionidae;Tenebrionidae incertae sedis;Tribolium;Tribolium castaneum;  

出力

cellular organisms;Eukaryota;Tribolium castaneum;

sedを使ってみました

sed 's/;[^;]*//' <<<"cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Protostomia;Ecdysozoa;Panarthropoda;Arthropoda;Mandibulata;Pancrustacea;Hexapoda;Insecta;Dicondylia;Pterygota;Neoptera;Endopterygota;Coleoptera;Polyphaga;Cucujiformia;Tenebrionoidea;Tenebrionidae;Tenebrionidae incertae sedis;Tribolium;Tribolium castaneum;"

生成する

cellular organisms;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Protostomia;Ecdysozoa;Panarthropoda;Arthropoda;Mandibulata;Pancrustacea;Hexapoda;Insecta;Dicondylia;Pterygota;Neoptera;Endopterygota;Coleoptera;Polyphaga;Cucujiformia;Tenebrionoidea;Tenebrionidae;Tenebrionidae incertae sedis;Tribolium;Tribolium castaneum;

承認された回答:

これはawkで簡単に行うことができます :

awk -F\; '{print $1 ";" $2 ";" $(NF-1) ";" $NF}'

これにより、;を使用して入力が分割されます (-F\; )、最初の($1 )、2番目($2 )、最後から2番目および最後のフィールド($(NF-1) および$NF; NF フィールドの数が含まれます。

次のバリアントは、出力で指定されたフィールドセパレータを再利用します。

awk -F\; '{print $1 FS $2 FS $(NF-1) FS $NF}'

Janisは、OFSを使用して改善されたバージョンを提案しました あまりにも:

awk 'BEGIN{FS=OFS=";"} {print $1,$2,$(NF-1),$NF}'

または、セパレータを別のパラメータとして保持する場合:

awk -F\; 'BEGIN{OFS=FS} {print $1,$2,$(NF-1),$NF}'

Linux
  1. $HOME と '~' (チルダ) の違いは?

  2. この警告を削除する方法:'va_start' の 2 番目のパラメーターは最後の名前の引数ではありませんか?

  3. cgroup と名前空間の違い

  1. Manjaroでのソフトウェアのインストールと削除

  2. ログインシェルと非ログインシェルの違いは?

  3. 一連の PDF の最後のページを抽出および/または削除する方法は?

  1. 2>&-、2> / dev / null、|&、&> / dev/nullと>/dev / null 2>&1の違いは?

  2. Sudo Su –とSudo Su —の違いは何ですか?

  3. EotとEofの違いは?