这是另一个菜鸟问题。我有这样的文件
约翰 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%2If 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