フォーマットしたい文字列があります。 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}'