使用awk的行到列和列到行

使用awk的行到列和列到行,awk,Awk,我有两个文件包含如下内容 cat file1.txt a b c 1 2 3 cat file2.txt a b c 1 2 3 我希望文件1被安排为 a b c 1 2 3 a b c 1 2 3 文件2将被安排为 a b c 1 2 3 a b c 1 2 3 我想要一个使用awk单行的解决方案,对于您的第一个文件,您可以尝试以下方法: awk '{for (i=1 ; i <= NF ; i++) print $i}' file1.txt awk 'BEGIN {st

我有两个文件包含如下内容

cat file1.txt
a b c 
1 2 3

cat file2.txt
a
b
c
1
2
3
我希望文件1被安排为

a
b
c
1
2
3
a b c
1 2 3
文件2将被安排为

a
b
c
1
2
3
a b c
1 2 3

我想要一个使用awk单行的解决方案,对于您的第一个文件,您可以尝试以下方法:

awk '{for (i=1 ; i <= NF ; i++) print $i}' file1.txt
awk 'BEGIN {str=""; i=1} {if(i%3 == 0){str=str""$0"\n"} else {str=str""$0" "} i++} END {print str}' file2.txt

然而,我想做一些假设,比如说,整个3行需要跳过输出中的一行。我想我们需要更多的细节…

一些
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
printf“%s”
#打印参数1($1)
NR%3==0?”RS:FS
#添加额外格式。测试行是否为3号。如果不是,则使用FS(空白),如果是,则使用RS,则使用新行。

因此,这将在每3行之后调整下一个参数。

我将使用
xargs
进行此操作:

$ xargs -n1 < file1
a
b
c
1
2
3

$ xargs -n3 < file2
a b c
1 2 3
$xargs-n1
惯用的awk方法,即在打印之前,根据需要将OFS或or设置为FS或RS(并在必要时使用
$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

默认情况下,您不需要使用
-F”“
。我喜欢此解决方案的简单性。但我正在寻找一个awk解决方案。很好的解决方案。我以前没有见过真正喜欢此解决方案的人,我搜索了一段时间以获得此解决方案,谢谢(+1)如果我想
'a',b',c',1',2',3'
,我该如何利用它?如何在其他命令的输出上使用
xargs-n1
?我的意思是,我想编写一个命令行,而不是将输出写入文件并使用
(例如,当我们为
cat file | wc-l
执行命令时).作为awk的新手,我无法完全理解file2的解决方案。如果您能解释,我将不胜感激it@jotne不要忘记用逗号将格式与数据分开。使用
FS
RS
并切换顺序会更简洁,并保存显式比较
awk'{printf“%s%s”,$0,(NR%3?FS:RS)}“
@sudo\O是的,它的清洁器,没有考虑它。&user2949699我为您添加了一些额外的信息,希望它能帮助您。其中似乎缺少一个
,因为我在第二个示例中得到了
未终止字符串
错误。@not2qubit修复。删除“