将列从文件背面移动到前面

时间:2013-06-25 07:28:28

标签: sorting awk

我有一个包含大量列(基本上是数千套三个)的文件,最后有三个特殊列(ChrPositionName)。 / p>

我想将这三个最后一列移到文件的前面,这样这些列就会变成Name Chr Position,然后文件继续三重奏。

我认为awk可能会有这种情况,但我对awk的工作方式不太了解!

示例输入:

Gene1.GType Gene1.X    Gene1.Y ....ending in GeneN.Y     Chr     Position        Name

期望的输出:

Name    Chr     Position        (Gene1.GType Gene1.X     Gene1.Y ) x n samples

2 个答案:

答案 0 :(得分:1)

我认为下面的例子或多或少会做你想要的。

$ cat file
A B C D E F G Chr Position Name
1 2 3 4 5 6 7 8 9 10
$ cat process.awk 
{
  printf $(NF-2)" "$(NF-1)" "$NF
  for( i=1; i<NF-2; i++)
  {
   printf " "$i
  }
  print " "
}
$ awk -f process.awk file 
Chr Position Name A B C D E F G 
8 9 10 1 2 3 4 5 6 7
NF中的

awk表示一行中的字段数。

答案 1 :(得分:0)

一个班轮:

awk '{ Chr=$(NF-2) ; Position=$(NF-1) ; Name=$NF ; $(NF-2)=$(NF-1)=$NF="" ; print Name, Chr, Position, $0 }' file