我有一个包含如下排列和列到行使用AWK
cat file1.txt
a b c
1 2 3
cat file2.txt
a
b
c
1
2
3
我想file1的被布置为
a
b
c
1
2
3
和file2到被布置为
a b c
1 2 3
两个文件
我想用awk一行解决方案
我有一个包含如下排列和列到行使用AWK
cat file1.txt
a b c
1 2 3
cat file2.txt
a
b
c
1
2
3
我想file1的被布置为
a
b
c
1
2
3
和file2到被布置为
a b c
1 2 3
两个文件
我想用awk一行解决方案
一些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
awk '{printf "%s" (NR%3==0?"RS:FS),$1}' file2
a b c
1 2 3
printf "%s"
#打印pararameter#1($ 1)
NR%3==0?"RS:FS
#添加额外的格式。测试行号是否3.如果不行,则使用FS(空格),如果使用RS,则换行。
所以这调整每3行后的下一个参数。
对于YOUT第一个文件,你可以尝试像:
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行需要在输出中跳过一行。我们需要更多的细节我想......
您不需要'-F“”'因为它的默认值。 – Jotne
是的,我忘了,我会编辑我的帖子。谢谢:) –
我会使用xargs
此:
$ xargs -n1 < file1
a
b
c
1
2
3
$ xargs -n3 < file2
a b c
1 2 3
我喜欢这个解决方案,因为它的简单性。但是正在寻找awk解决方案。 – user2949699
不错的一个..我之前没有看到 – ackuser
真的很喜欢这个,我搜索了一段时间来得到这个解决方案,谢谢(+1) – Patric
的简单设置的OFS或ORS的FS或RS适当打印之前(并重新编译,如果有必要$1=$1
备案)的惯用awk的方法将与任何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
作为awk的新手,我无法完全理解file2的解决方案。将不胜感激,如果你能解释它 – user2949699
@jotne不要忘记格式与数据分开的逗号。使用'FS'和'RS'更清晰,并切换顺序保存显式比较'awk'{printf“%s%s”,$ 0,(NR%3?FS:RS)}''。 –
@sudo_O是它的更清洁,没有想过它。 &user2949699我为你添加了一些额外的信息,希望它有助于一些。 – Jotne