Bash 将每行的第二列移动到新的下一行

Bash 将每行的第二列移动到新的下一行,bash,shell,unix,awk,sed,Bash,Shell,Unix,Awk,Sed,我可以通过以下方式将第二行移动到前一行的第二列: awk '{printf "%s%s",$0,(NR%2?FS:RS)}' file > newfile 但我不能反过来做。我得到的资料如下: 1 a 2 b 3 c 我需要 1 a 2 b 3 c 我已经检查了几个类似的列-行转换问题,但无法理解我的情况。谢谢 在强制awk使用$1=$1技巧重写每条记录后,您可以将此awk命令与OFS='\n'一起使用,以获取输出字段分隔符作为换行符: awk '{$1=$1} 1' OFS='\n

我可以通过以下方式将第二行移动到前一行的第二列:

awk '{printf "%s%s",$0,(NR%2?FS:RS)}' file > newfile
但我不能反过来做。我得到的资料如下:

1 a
2 b
3 c
我需要

1
a
2
b
3
c

我已经检查了几个类似的列-行转换问题,但无法理解我的情况。谢谢

在强制awk使用
$1=$1
技巧重写每条记录后,您可以将此awk命令与OFS='\n'一起使用,以获取输出字段分隔符作为换行符:

awk '{$1=$1} 1' OFS='\n' file
1
a
2
b
3
c
您还可以使用
grep-o

grep -Eo '\w+' file
1
a
2
b
3
c

在强制awk使用
OFS='\n'
重写每个记录后,您可以将此awk命令与
OFS='\n'
一起使用,以获取输出字段分隔符作为换行符:

awk '{$1=$1} 1' OFS='\n' file
1
a
2
b
3
c
您还可以使用
grep-o

grep -Eo '\w+' file
1
a
2
b
3
c

只需使用
xargs
一次处理一条记录

xargs -n1 <file
1
a
2
b
3
c

xargs-n1一次只需使用一条记录

xargs -n1 <file
1
a
2
b
3
c

xargs-n1您可以使用
tr

cat file | tr ' ' '\n'
sed

sed -r 's/ /\n/g' file
你得到

1
a
2
b
3
c

您可以使用
tr

cat file | tr ' ' '\n'
sed

sed -r 's/ /\n/g' file
你得到

1
a
2
b
3
c

丢失UUOC:
tr'''\n'
丢失UUOC:
tr'\n'
您非常了解awk,可以编写
awk'{printf“%s%s”,$0,(NR%2?FS:RS)}文件
,但无法编写
awk'{print$1 RS$2}文件
???我强烈建议你开始阅读阿诺德·罗宾斯的《有效的Awk编程》第四版,这样你就可以对人们为你编写的脚本有一个基本的了解。我完全同意你的看法:我非常同意!我已经买了一本关于sed&awk的书,在我的待办事项列表中,还有很多其他的事情。但我没有要求上面的脚本,我在另一篇文章中找到了它。欢迎扔掉你所有关于sed和awk的书,因为你不需要一本书来学习你应该在sed、s、g和p中使用的唯一结构(带-n),书中的awk部分将过时且不完整。任何人都应该尝试学习awk的唯一一本书就是我提到的那本。非常感谢你提供的有用信息,Ed。我已经检查了你提到的那本书,它看起来确实很棒。我正在从生物学转向生物信息学,所以很难从头开始学习语言,我只是在为Python做这件事,但我可以放弃sed,因为awk已经比sed好了。感谢您您对awk非常了解,可以编写
awk'{printf“%s%s”,$0,(NR%2?FS:RS)}文件
,但您不知道如何编写
awk'{print$1 RS$2}文件
???我强烈建议你开始阅读阿诺德·罗宾斯的《有效的Awk编程》第四版,这样你就可以对人们为你编写的脚本有一个基本的了解。我完全同意你的看法:我非常同意!我已经买了一本关于sed&awk的书,在我的待办事项列表中,还有很多其他的事情。但我没有要求上面的脚本,我在另一篇文章中找到了它。欢迎扔掉你所有关于sed和awk的书,因为你不需要一本书来学习你应该在sed、s、g和p中使用的唯一结构(带-n),书中的awk部分将过时且不完整。任何人都应该尝试学习awk的唯一一本书就是我提到的那本。非常感谢你提供的有用信息,Ed。我已经检查了你提到的那本书,它看起来确实很棒。我正在从生物学转向生物信息学,所以很难从头开始学习语言,我只是在为Python做这件事,但我可以放弃sed,因为awk已经比sed好了。非常感谢。