awk - 使用 AWK 整理文件

标签 awk dataset transpose organization

好吧,我有以下文件:

Progeny Sire    Dam    Sex  PENAS       P35         P41
13254   11908   11421   M   47.275811   1322.828674 1719.183748
13323   11335   11386   M   43.29896    1225.57111  1634.436447
13562   11864   11895   M   47.884191   1228.568357 1615.427502
13338   11335   11970   M   45.780973   1196.32757  1561.900145

我需要转置 PENAS、P35 和 P41 列。这些列将成为新列:年龄。从视觉上看,我需要该文件是这样的:
Progeny Sire    Dam     Sex AGE     Peso
13254   11908   11421   M   PENAS   47.275811
13254   11908   11421   M   P35     1322.828674
13254   11908   11421   M   P41     1719.183748
13323   11335   11386   M   PENAS   43.29896
13323   11335   11386   M   P35     1225.57111
13323   11335   11386   M   P41     1634.436447
13562   11864   11895   M   PENAS   47.884191
13562   11864   11895   M   P35     1228.568357
13562   11864   11895   M   P41     1615.427502
13338   11335   11970   M   PENAS   45.780973
13338   11335   11970   M   P35     1196.32757
13338   11335   11970   M   P41     1561.900145

我试过这个命令,但没有用:
awk 'NR==1{h=$1 OFS $2 OFS $3 OFS $4 OFS $5 OFS $6 OFS $7; next}
            {a[$2]=(($1 in a)?(a[$1] OFS $NF):(OFS $5 OFS $6 OFS $7 OFS "AGE"));
             if(!($7 in b)) {h=h OFS $7; b[$7]}}
        END{print h; for(k in a) print k,a[k]}' a.txt | column -t > b

我被困在这一点上,有什么建议吗?谢谢。
请注意,我原来的 daset 有 1400 行。

最佳答案

这是另一个 awk ,不依赖于列数......

$ awk 'NR==1{n=split($0,h); 
             for(i=1;i<=NF-3;i++) printf "%s", $i OFS; 
             printf "%s\n", "AGE" OFS "Peso"; next} 
            {split($0,p); 
             NF--; 
             for(i=1;i<=3;i++) 
               {$(NF-1)=h[NF-2+i]; 
                $NF=p[NF-2+i]; 
                print}}' file | column -t


Progeny  Sire   Dam    Sex  AGE    Peso
13254    11908  11421  M    PENAS  47.275811
13254    11908  11421  M    P35    1322.828674
13254    11908  11421  M    P41    1719.183748
13323    11335  11386  M    PENAS  43.29896
13323    11335  11386  M    P35    1225.57111
13323    11335  11386  M    P41    1634.436447
13562    11864  11895  M    PENAS  47.884191
13562    11864  11895  M    P35    1228.568357
13562    11864  11895  M    P41    1615.427502
13338    11335  11970  M    PENAS  45.780973
13338    11335  11970  M    P35    1196.32757
13338    11335  11970  M    P41    1561.900145

关于awk - 使用 AWK 整理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50690799/

相关文章:

linux - 有人可以解释下面的代码和下面的查询吗

linux - 如何从 awk 中的变量中修剪空格?

database - 如何为多个数据库平台生成类型化数据集?

c# - 将数据集转换为 XML

javascript - 创建键数组和值数组数组

hadoop - Proc Transpose 的 SAS Hive SQL (Hadoop) 版本?

awk - GNU Awk 中的强类型正则表达式常量如何工作?

python - 转置/解压缩功能(zip的倒数)?

swift - 矩阵排序和转置 swift4

bash - 用 awk 换行