我有两个文件包含如下
cat file1.txt
a b c
1 2 3
cat file2.txt
a
b
c
1
2
3
Run Code Online (Sandbox Code Playgroud)
我想将file1安排为
a
b
c
1
2
3
Run Code Online (Sandbox Code Playgroud)
和file2安排为
a b c
1 2 3
Run Code Online (Sandbox Code Playgroud)
我想用awk一行解决方案
Chr*_*our 12
我用xargs它:
$ xargs -n1 < file1
a
b
c
1
2
3
$ xargs -n3 < file2
a b c
1 2 3
Run Code Online (Sandbox Code Playgroud)
一些awk版本
awk 1 RS=" |\n" file1 # gnu awk version
awk '{for (i=1;i<=NF;i++) print $i}' file1 # portable version
a
b
c
1
2
3
Run Code Online (Sandbox Code Playgroud)
awk '{printf "%s" (NR%3==0?RS:FS),$1}' file2
a b c
1 2 3
Run Code Online (Sandbox Code Playgroud)
printf "%s" #print pararameter#1($ 1)
NR%3==0?"RS:FS#添加额外的格式.测试行是否为数字3.如果不是,则使用FS(空格),如果是使用RS,则为新行.
所以这会在每3行后调整下一个参数.
在打印之前简单地将OFS或ORS设置为FS或RS的惯用awk方法(并在必要时重新编译记录$1=$1)将适用于任何awk:
$ cat file1
a b c
1 2 3
$ awk '{OFS=RS;$1=$1}1' file1
a
b
c
1
2
3
$ cat file2
a
b
c
1
2
3
$ awk '{ORS=(NR%3?FS:RS)}1' file2
a b c
1 2 3
Run Code Online (Sandbox Code Playgroud)