如何使用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

一个制表符等于 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       +

相关内容