这是另一个菜鸟问题。我有这样的文件
约翰 30 麦克风 0.0786268 泰森 0.114889 加布里埃尔 0.176072 菲奥娜 0.101895
我需要将每隔一行移到一个新列,所以它应该看起来像这样
约翰 30 迈克 0.0786268 泰森 0.114889 加布里埃尔 0.176072 菲奥娜 0.101895
我刚才awk 'NR%2==0'
将每隔一行打印一次,有人可以建议我如何将它们转移到上面的新列。非常感谢任何帮助。
这是另一个菜鸟问题。我有这样的文件
约翰 30 麦克风 0.0786268 泰森 0.114889 加布里埃尔 0.176072 菲奥娜 0.101895
我需要将每隔一行移到一个新列,所以它应该看起来像这样
约翰 30 迈克 0.0786268 泰森 0.114889 加布里埃尔 0.176072 菲奥娜 0.101895
我刚才awk 'NR%2==0'
将每隔一行打印一次,有人可以建议我如何将它们转移到上面的新列。非常感谢任何帮助。
awk '{printf "%s%s",$0,(NR%2?FS:RS)}' file
Explanation:
printf
will not include a new line character at the end of line (unlike print
)(NR%2?FS:RS)
decides new line (RS) or field seperator (FS) based on NR%2
If your colmns should be seperated by \t
awk '{printf "%s%s",$0,NR%2?"\t":RS}'
xargs 可以做到,命令行真的很短:
xargs -n2 < file
我很想这样使用sed
:
sed 'N;s/\n/ /' file
但是,这不会很好地格式化您的数据。您可以将其输入column -t
:
< file sed 'N;s/\n/ /' | column -t
但这似乎没有必要。像这样使用会更好paste
:
paste - - < file
结果:
John 30
Mike 0.0786268
Tyson 0.114889
Gabriel 0.176072
Fiona 0.101895
paste - - < file > newfile
paste 默认使用制表符作为分隔符。
sed 比 awk 做得更好:
sed 'N;s/\n/ /g' yourfile
也在 awk 中:
awk '{if(NR%2!=0){p=""}else{p="\n"};printf $0" "p}' your_file
还在这里检查另一个解决方案
另一种awk
解决方案,比最受好评的 IMO 更优雅(至少更短):
$ awk 'ORS=NR%2?FS:RS' file
John 30
Mike 0.0786268
Tyson 0.114889
Gabriel 0.176072
Fiona 0.101895