0

次の形式のデータがあり、列 6 がある場合は、最初の列と列 6 を抽出したいと考えています。

ID1        Bacteria;Firmicutes;Clostridia;Clostridiales;
ID2        Bacteria;Firmicutes;Clostridia;Clostridiales;Eubacteriaceae;Eubacterium;Eubacterium hallii;
ID3        Bacteria;Firmicutes;
ID4        Bacteria;Firmicutes;
ID5        Bacteria;Firmicutes;Clostridia;
ID6        Bacteria;
ID7        Bacteria;Firmicutes;Clostridia;Clostridiales;Ruminococcaceae;Faecalibacterium;
ID8        Bacteria;Firmicutes;Clostridia;Clostridiales;Ruminococcaceae;Faecalibacterium;Faecalibacterium prausnitzii;

出力は次のようになります。

ID2 Eubacterium
ID7 Faecalibacterium
ID8 Faecalibacterium

「;」で区切って問題を解決しようとしています 6番目の列をgrepしcut -d ";" -f 6ますが、より良い解決策があると思います. 前もって感謝します!

4

2 に答える 2

2

awkを使用できます:

awk -F\; 'NF>=6{print substr ($1, 0, 4), $6}' file

フィールドが 6 つ以上ある場合は、 delimiter に基づいてフィールド 1 と 6 を抽出します;。次に、フィールド 1 から最初の 3 文字を抽出します。

出力例:

$ awk -F\; 'NF>=6{print substr ($1, 0, 4), $6}' file
ID2 Eubacterium
ID7 Faecalibacterium
ID8 Faecalibacterium
于 2013-09-28T11:36:11.393 に答える