2番目と最後から2番目の一致の間のすべての項目を削除します。

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;

ベストアンサー1

以下を使用すると、簡単にこれを行うことができますawk

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

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

次のバリアントは、出力で指定されたフィールド区切り文字を再利用します。

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

ジャニスまた、拡張バージョンを使用することをお勧めしますOFS

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

または、区切り文字を別のパラメータとして保持したい場合:

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

おすすめ記事