这是另一个noob问题。我有这样的文件
John 30 Mike 0.0786268 Tyson 0.114889 Gabriel 0.176072 Fiona 0.101895
我需要将每隔一行移到一个新列,所以它应该看起来像这样
John 30 Mike 0.0786268 Tyson 0.114889 Gabriel 0.176072 Fiona 0.101895
我刚才awk 'NR%2==0'
将每隔两行打印一次,有人可以建议我如何将它们转移到上面的新列。任何帮助都非常感谢。
答案 0 :(得分:8)
awk '{printf "%s%s",$0,(NR%2?FS:RS)}' file
说明:
printf
不会在行尾包含换行符号(与print
不同)(NR%2?FS:RS)
根据NR%2
如果您的colmns应该由\t
awk '{printf "%s%s",$0,NR%2?"\t":RS}'
答案 1 :(得分:5)
xargs可以做到,命令行真的很短:
xargs -n2 < file
答案 2 :(得分:1)
答案 3 :(得分:1)
我很想像这样使用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
答案 4 :(得分:0)
sed 'N;s/\n/ /g' yourfile
也在awk中:
awk '{if(NR%2!=0){p=""}else{p="\n"};printf $0" "p}' your_file
还要检查另一个解决方案here
答案 5 :(得分:0)
awk 'NR%2{s=$0; next} {print s, $0}' file
awk 'NR%2{s=$0; next} {$0=s" "$0}1' file
答案 6 :(得分:0)
paste - - < file > newfile
默认情况下,粘贴使用tab作为分隔符。