Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 将列从文件的后面移到前面_Sorting_Awk - Fatal编程技术网

Sorting 将列从文件的后面移到前面

Sorting 将列从文件的后面移到前面,sorting,awk,Sorting,Awk,我有一个文件,有很多列(基本上是几千组三列),最后有三个特殊列(Chr和Position和Name) 我想将最后三列移到文件的前面,使这些列成为Name Chr Position,然后文件继续使用这三个列 我认为这在awk中是可能的,但我对awk的工作原理知之甚少 样本输入: Gene1.GType Gene1.X Gene1.Y ....ending in GeneN.Y Chr Position Name 期望输出: Name Chr Po

我有一个文件,有很多列(基本上是几千组三列),最后有三个特殊列(
Chr
Position
Name

我想将最后三列移到文件的前面,使这些列成为
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

我认为下面的例子或多或少满足了您的需求

$ 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
$cat文件
A B C D E F G Chr职位名称
1 2 3 4 5 6 7 8 9 10
$cat process.awk
{
printf$(NF-2)“$(NF-1)”“$NF
对于(i=1;i一个线性:

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

请提供一些输入和输出示例,我不太清楚您想要实现什么。感谢您使其更易于阅读,因为它在输出中的字段顺序不同,最好使用
OFS
,而不是多次重复空格字符,但它可以工作,所以+1@Birei这是一个很好的观点,但可以我觉得它不能与
printf$i,
一起使用。你会怎么做?对我来说不起作用,但这可能与这个巨大的文件有关。无论如何,谢谢你。