我有一个这样的文件
gene - chr7 55675 55676 100 100
gene - chr7 55678 55679 100 100
gene - chr7 55683 55686 NP 100
该文件以制表符分隔。
我想更改文件,使第 5 列应位于第 4 列,第 4 列应位于第 5 列,然后按原样打印所有列。我只向您展示了第 5 列之后的 2 列,但还可以有更多列。
我尝试过cut -f 1,2,3,5,4,6-
,但不起作用。
我更喜欢 awk 解决方案。
谢谢
答案1
交换字段 4 和 5:
$ awk -F'\t' '{a=$4; $4=$5; $5=a;} 1' OFS='\t' file
gene - chr7 55676 55675 100 100
gene - chr7 55679 55678 100 100
gene - chr7 55686 55683 NP 100
怎么运行的:
-F'\t'
这将设置选项卡输入上的字段分隔符。
a=$4; $4=$5; $5=a
这交换了第四和第五字段。
1
这是 awk 对 print-the-line 的神秘简写。
OFS='\t'
这告诉 awk 使用制表符作为输出的字段分隔符。
保持标题不变
要交换除第一行之外的所有行上的字段:
awk -F'\t' -v OFS='\t' 'NR>1{a=$4; $4=$5; $5=a;} 1' file
NR
是行号。放置NR>1
在交换命令之前的是一个条件。仅当条件为真时才会执行交换命令。
另类风格
一些造型师建议将 OFS 的分配放在代码之前:
awk -F'\t' -v OFS='\t' '{a=$4; $4=$5; $5=a;} 1' file