Unix 如何将多个线块合并到一个块中?
我有这样一个输入文件:Unix 如何将多个线块合并到一个块中?,unix,Unix,我有这样一个输入文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 我希望它像: 1 2 3 7 8 9 13 14 15... 4 5 6 10 11 12 16 17 18... 如何使用Unix/Linux命令执行此操作?基本上,我想将几个块(例如,在上面的示例中,每个块有2行)组合成一个块 我试过awk命令。例如: awk 'ORS=NR%2?FS:RS' input.txt 但它将合并第1行和第2行、第3行和第4行,依此类推
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
...
我希望它像:
1 2 3 7 8 9 13 14 15...
4 5 6 10 11 12 16 17 18...
如何使用Unix/Linux命令执行此操作?基本上,我想将几个块(例如,在上面的示例中,每个块有2行)组合成一个块
我试过awk命令。例如:
awk 'ORS=NR%2?FS:RS' input.txt
但它将合并第1行和第2行、第3行和第4行,依此类推。我想要的是合并第1行和第3行…,第2行和第4行…不是最优的,但可以工作:):
代码:
或在一个awk中:
awk '
BEGIN{ORS=" "}
NR%2{print; next}
{arr[c++]=$0}
END{print "\n"; for (a in arr) {print arr[a]}}
' file
输入文件:
输出:
最新的命令有一个前导空格,我不知道如何在没有
(g|en)sub()
:)使用awk
$ awk -v l=2 'FNR<=l{a[FNR]=$0; next} {a[(FNR-1)%l+1]=a[(FNR-1)%l+1] FS $0} END{for(i=1; i<=l; i++) print a[i]}' file
1 2 3 7 8 9 13 14 15
4 5 6 10 11 12 16 17 18
你已经试过什么了?你在哪里卡住了?我试过awk命令。例如:awk'ORS=NR%2?FS:RS'input.txt,但它将合并第1行和第2行、第3行和第4行,依此类推。我想要的是合并第1行和第3行,第2行和第4行…用这些重要信息编辑你的问题谢谢,Gilles!这很有效。在最初的问题中,我提到了两行输出。这只是为了让争论更容易。但是,如果我希望输出为3行或更多行,您有更好的解决方案吗?换句话说,我将此作为输入:line1 line2 line3 line4。。。我希望输出变成:line1 line4 line7。。。第2行第5行第8行。。。第3行第6行第9行…添加了uniq awk命令行。您可以使用NR(行号)进行数学运算
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20 21
22 23 24
1 2 3 7 8 9 13 14 15 19 20 21
4 5 6 10 11 12 16 17 18 22 23 24
$ awk -v l=2 'FNR<=l{a[FNR]=$0; next} {a[(FNR-1)%l+1]=a[(FNR-1)%l+1] FS $0} END{for(i=1; i<=l; i++) print a[i]}' file
1 2 3 7 8 9 13 14 15
4 5 6 10 11 12 16 17 18
$ awk -v l=3 'FNR<=l{a[FNR]=$0; next} {a[(FNR-1)%l+1]=a[(FNR-1)%l+1] FS $0} END{for(i=1; i<=l; i++) print a[i]}' f5
1 2 3 10 11 12
4 5 6 13 14 15
7 8 9 16 17 18