使用 Bash 转置未在列中分隔的数字

Transpose number not separated in columns using Bash

我试过 tr function to transpose in bash but it's 不工作。例如tr 'abcd' 'jkmn'...

想法是取一系列数字:

92121
92911

并切换它们,使它们看起来像这样:

99
22
19
21
11

这是一个测试数据集:

echo "92121
      92911
      29222
      22222
      22222
      22222" > ~/Desktop/output.geno

我知道我们可以使用 分隔数字。

我觉得我可以用

for var in 1:96
do
   tmp=$(cut -c var output.geno)
   tr $tmp
done

@M。博索莱伊:尝试: 假设Input_file如下。

cat  Input_file
92121
92911
29222
22222
22222
22222

以下代码可能会有所帮助。

awk '{for(i=1;i<=length([=11=]);i++){array[i]=array[i]?array[i] substr([=11=],i,1):substr([=11=],i,1)};MAX=MAX>i?MAX:i} END{for(j=1;j<MAX;j++){print array[j]}}'   Input_file

NON-one 上述解的线性形式也如下

awk '{
        for(i=1;i<=length([=12=]);i++){
                                        array[i]=array[i]?array[i] substr([=12=],i,1):substr([=12=],i,1)
                                  };
        MAX=MAX>i?MAX:i
     }
     END{
                for(j=1;j<MAX;j++){
                                        print array[j]
                                  }
     }
    '   Input_file

输出结果如下。

992222
229222
192222
212222
112222

输入

$ cat file
92121
92911
29222
22222
22222
22222

输出

$ awk '
{   
    n=split([=11=],F,r)
    for (i=1; i in F; i++)
        a[NR,i] = F[i]
}
n>p { p = n }
END {    
    for(j=1; j<=p; j++) 
    {
        str=a[1,j]
        for(i=2; i<=NR; i++)
        {
            str=str a[i,j];
        }
        print str
    }
}' file
992222
229222
192222
212222
112222