将列转置为行
transpose column to row
我尝试使用 awk 转置下面的文件
n counts
1 -0.1520
1 0.0043
1 -0.4903
10 0.0316
10 -0.4076
10 -0.1175
200 0.2720
200 -0.2007
200 0.0559
我需要这样的输出
1 -0.1520 0.0043 -0.4903
10 0.0316 -0.4076 -0.1175
200 0.2720 -0.2007 0.0559
我尝试了但没有成功
awk 'NR==1{print} NR>1{a[]=a[]" "}END{for (i in a){print i " " a[i]}}'
谢谢
它的工作。试试下面
awk 'NR==1{print} NR>1{a[]=a[]" "}END{for (i in a){print i " " a[i]}}' file | tac
或者您可以使用排序
awk 'NR==1{print} NR>1{a[]=a[]" "}END{for (i in a){print i " " a[i]}}' file | sort -k1 -n
嗯嗯嗯。
$ cat bar.awk
#! /usr/bin/awk -f
BEGIN{getline}
!= n {if(row)print row; n=; row = [=10=]}
== n {row = row FS }
END{ print row }
$ ./bar.awk foo
1 -0.1520 -0.1520 0.0043 -0.4903
10 0.0316 0.0316 -0.4076 -0.1175
200 0.2720 0.2720 -0.2007 0.0559
getline 吃掉了 header
!= n
会在第一列更改时通知
n
将从 0
开始,因此如果第一列(和第二行)也为零,则会出现问题,您必须将 n
初始化为其他内容
当第一列发生变化时,是时候打印上一行并开始收集下一行了,
(如果该行是空的,就像最初一样,不要打印它)
当第一列与上一行相同时,
只需将第二个值附加到您的行。
最后打印最后一行。
FS
是当前字段分隔符。
我尝试使用 awk 转置下面的文件
n counts
1 -0.1520
1 0.0043
1 -0.4903
10 0.0316
10 -0.4076
10 -0.1175
200 0.2720
200 -0.2007
200 0.0559
我需要这样的输出
1 -0.1520 0.0043 -0.4903
10 0.0316 -0.4076 -0.1175
200 0.2720 -0.2007 0.0559
我尝试了但没有成功
awk 'NR==1{print} NR>1{a[]=a[]" "}END{for (i in a){print i " " a[i]}}'
谢谢
它的工作。试试下面
awk 'NR==1{print} NR>1{a[]=a[]" "}END{for (i in a){print i " " a[i]}}' file | tac
或者您可以使用排序
awk 'NR==1{print} NR>1{a[]=a[]" "}END{for (i in a){print i " " a[i]}}' file | sort -k1 -n
嗯嗯嗯。
$ cat bar.awk
#! /usr/bin/awk -f
BEGIN{getline}
!= n {if(row)print row; n=; row = [=10=]}
== n {row = row FS }
END{ print row }
$ ./bar.awk foo
1 -0.1520 -0.1520 0.0043 -0.4903
10 0.0316 0.0316 -0.4076 -0.1175
200 0.2720 0.2720 -0.2007 0.0559
getline 吃掉了 header
!= n
会在第一列更改时通知
n
将从 0
开始,因此如果第一列(和第二行)也为零,则会出现问题,您必须将 n
初始化为其他内容
当第一列发生变化时,是时候打印上一行并开始收集下一行了,
(如果该行是空的,就像最初一样,不要打印它)
当第一列与上一行相同时,
只需将第二个值附加到您的行。
最后打印最后一行。
FS
是当前字段分隔符。