我尝试使用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[$1]=a[$1]" "$2}END{for (i in a){print i " " a[i]}}'
谢谢
答案 0 :(得分:0)
它的工作。尝试以下
awk 'NR==1{print} NR>1{a[$1]=a[$1]" "$2}END{for (i in a){print i " " a[i]}}' file | tac
或者你可以使用sort
awk 'NR==1{print} NR>1{a[$1]=a[$1]" "$2}END{for (i in a){print i " " a[i]}}' file | sort -k1 -n
答案 1 :(得分:0)
mmm awk。
$ cat bar.awk
#! /usr/bin/awk -f
BEGIN{getline}
$1 != n {if(row)print row; n=$1; row = $0}
$1 == n {row = row FS $2}
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吃掉标题
当第一列更改时,$1 != n
会注意到
n
将以0
开头,如果第一列(&第二行)也为零,则会出现问题,您必须将n
初始化为其他内容
当第一列改变时,是时候打印上一行并开始收集下一行,
(如果该行为空,则最初不打印)
当第一列与前一行相同时,
只需将第二个值附加到您的行中。
最后打印最后一行。
FS
是当前字段分隔符。