我有一个有120列的文件.它的一部分在这里,有12列.

A1      B1     C1      D1       A2      B2     C2      D2       A3      B3      C3      D3     
4       4       5       2       3       3       2       1       9       17      25      33
5       6       4       6       8       2       3       5       3       1       -1      -3
7       8       3       10      13      1       4       9       -3      -15     -27     -39
9       10      2       14      18      0       5       13      -9      -31     -53     -75
11      12      1       18      23      -1      6       17      -15     -47     -79     -111
13      14      0       22      28      -2      7       21      -21     -63     -105    -147
15      16      -1      26      33      -3      8       25      -27     -79     -131    -183
17      18      -2      30      38      -4      9       29      -33     -95     -157    -219
19      20      -3      34      43      -5      10      33      -39     -111    -183    -255
21      22      -4      38      48      -6      11      37      -45     -127    -209    -291

我想通过将所有A列(A1、A2、A3、A4)以及类似的所有B(B1、B2、B3、B4)、Cs(C1、C2、C3、C4)、DS(D1、D2、D3、D4)放在一起来重新排列.

我希望将这些专栏打印为

A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4
 

我的 playbook 是:

#!/bin/sh
sed -i '1d' input.txt
for i in {1..4};do
    j=$(( 1 + $(( 3 * $((  i - 1 )) ))  ))
awk '{print $'$j'}' input.txt >> output.txt
done
for i in {1..4};do
    j=$(( 2 + $(( 3 * $((  i - 1 )) ))  ))
awk '{print $'$j'}' input.txt >> output.txt
done
for i in {1..4};do
    j=$(( 3 + $(( 3 * $((  i - 1 )) ))  ))
awk '{print $'$j'}' input.txt >> output.txt
done

它在一栏中打印所有内容.

推荐答案

是不是只有A,B,C,D,A,B,C,D?这样的事情应该会奏效(尽管它又快又脏,又具体):

awk -v OFS='\t' '{
    for (i=0; i<4; ++i) {  # i=0:A, i=1:B,etc.
       for (j=0; 4*j+i<NF; ++j) {
         if (i || j) printf "%s", OFS;
         printf "%s", $(4*j+i+1);
       }
    }
    printf "%s", ORS;
}'

Linux相关问答推荐

无法在Raspberry PI 3 Model B上分配256TB的虚拟内存

X86_64程序集中的分段故障:系统调用问题

Git在某些文件中添加回车符,尽管autocrlf已关闭

更改 awk 中的上一个重复行

为什么我的 Docker 进程不断在我的 Raspberry Pi 上重新启动?

x86_64 Linux 程序集中的逻辑与实现

问题:Virtio rpmsg 总线 virtio0:收到的 msg 没有收件人 - 在 Yocto Hardknott - imx7d-pico

nohup 是否可以跨管道工作?

如何使用不同的出口 IP 一次运行多个 Tor 进程?

grep 时间命令输出

我可以在 Ubuntu 上使用 Homebrew 吗?

如何分析内存使用情况?

如何在 Linux 中通过控制台输出启动 Tomcat?

根据日期范围过滤日志(log)文件条目

可以通过 SSH 连接的所有用户的列表

根据文件名模式和文件内容列出文件名?

Shell 脚本, echo 消息后在同一行读取

基于shell中正则表达式的 colored颜色 突出显示输出

计算每个进程打开的文件

适用于 Windows、Linux、MacOS X 的跨平台脚​​本