awkを使用してファイルを印刷する方法

awkを使用してファイルを印刷する方法

入力(タブ区切り)

HTR12   AT1G01370       Chr1    143564  145684  +
SDG42   AT1G01920       Chr1    316128  319650  +
SDG5    AT1G02580       Chr1    544783  549202  +

出力(タブ区切り)

Chr1    143564  145684  HTR12   AT1G01370       +
Chr1    316128  319650  SDG42   AT1G01920       +
Chr1    544783  549202  SDG5    AT1G02580       +

私の解決策は

awk -v OFS="\t" '{print $3,$4,$5,$2,$1,$6}' input > output

でも良くないようです。

答え1

努力する

awk -F'\t' -v OFS='\t' '{print $3,$4,$5,$1,$2,$6}' input > output

これにより、両方に対してフィールド区切り記号(FS)が設定されます。

  • -F'\t'IFS(入力)、
  • -v OFS='\t'OFS(出力)。

私も交換し$1$2

サンプルファイルを追加しました。出力は次のようになります。

awk -F'\t' -v OFS='\t' '{print $3,$4,$5,$1,$2,$6}' se.txt
Chr1    143564  145684  HTR12   AT1G01370       +
Chr1    316128  319650  SDG42   AT1G01920       +

od -cチェックタブに追加)

awk -F'\t' -v OFS='\t' '{print $3,$4,$5,$1,$2,$6}' se.txt | od -c
0000000   C   h   r   1  \t   1   4   3   5   6   4  \t   1   4   5   6
0000020   8   4  \t   H   T   R   1   2  \t   A   T   1   G   0   1   3
0000040   7   0  \t   +  \n   C   h   r   1  \t   3   1   6   1   2   8
0000060  \t   3   1   9   6   5   0  \t   S   D   G   4   2  \t   A   T
0000100   1   G   0   1   9   2   0  \t   +      \n
0000113

答え2

私はスペースをフィールド区切り文字として使用し、フィールド間のタブを使用して完璧な方向を取得します。

awk -F" " '{print $3"\t"$4"\t"$5"\t"$2"\t"$1"\t"$6}' input.txt > output.txt

出力:

Chr1     143564  145684  AT1G01370   HTR12   +
Chr1     316128  319650  AT1G01920   SDG42   +
Chr1     544783  549202  AT1G02580   SDG5    +

答え3

1つのタブは8つのスペースに等しいので、次のコードを試してください。

awk '{printf "%8s%8s%8s%8s%8s%8s\n",$3,$4,$5,$1,$2,$6}' filename

    Chr1  143564  145684   HTR12AT1G01370       +
    Chr1  316128  319650   SDG42AT1G01920       +
    Chr1  544783  549202    SDG5AT1G02580       +

関連情報