首页 > 解决方案 > 如何将多行更改为列

问题描述

我有一个文件如下,并且想在找到指定行时更改为列(这里是del_size fq)。

$ cat file.txt
del_size    fq
0   13452
-1  13034
del_size    fq
0   13
-1  0
-2  2155
del_size    fq
0   6600
-1  8
-2  0

在此处输入图像描述

任何帮助深表感谢。谢谢。

标签: linuxawktext-processing

解决方案


复杂的 GNUawk解决方案:

awk '{
         if (/^del_size/) {
             h = (h? h OFS : "") $0; cnt++;
             if (r_cnt > max_rows) max_rows = r_cnt;
             i = j = r_cnt = 0
         }
         else { 
             arr[cnt][++i] = $0;
             r_cnt++ 
         }
         next
     }
     END{
         print h;
         for (i = 1; i <= max_rows; i++) {
             for (j = 1; j <= cnt; j++) {
                 items = arr[j][i];
                 if (items == "") items = "" OFS "";
                 printf "%s%s", (j == 1 ? "" : OFS), items
             }
             print ""
         } 
     }' OFS='\t' file

输出:

del_size    fq  del_size    fq  del_size    fq
0   13452   0   13  0   6600
-1  13034   -1  0   -1  8
        -2  2155    -2  0

推荐阅读