AWK のフィールド区切り文字に問題があります。入力ファイルは次のようになります。
1 | すべて | | | 同義語 |
1 | ルート | | | 学名 |
2 | 細菌 | 細菌 | 学名 |
2 | モネラ | モネラ | モネラ | モネラ | 一部 |
2 | 原核生物 | 原核生物 | 一部 |
2 | 原核生物 | 原核生物 | 原核生物 | 原核生物 | 一部 |
2 | 原核生物 | 原核生物 | 一部 |
2 | 細菌 | 細菌 | ブラスト名 |
ここのフィールド区切り文字はタブ、パイプ、タブ\t|\t
なので、1列目と2列目だけを印刷しようとしています
awk -F'\t|\t' '{print $1 "\t" $2}' nodes.dmp | less
目的の出力ではなく、出力は最初の列の後にパイプ文字が続きます。パイプをエスケープしようとしまし\t\|\t
たが、出力は同じままです。
1 |
1 |
2 |
2 |
2 |
2 |
1 列目と 3 列目を印刷すると、元の意図した出力が得られました。
awk -F'\t|\t' '{print $1 "\t" $3}' nodes.dmp | less
しかし、なぜこれが意図したとおりに機能しないのか、私は困惑しています。
以下の perl ワンライナーが機能することは理解していますが、本当に欲しいのは awk を使用することです。
perl -aln -F"\t\|\t" -e 'print $F[0],"\t",$F[1]' nodes.dmp | less