Bash - 将行与下面的行连接起来

Bash - Concatenate line with the one below

我需要用几行连接一个文本文件。这是我的情况:

USER abc  
PASS 123  
USER efg  
PASS 456   
USER hil  
PASS 789

等等...

我需要这样的输出:

USER abc PASS 123  
USER efg PASS 456     
USER hil PASS 789

我尝试了以下解决方案:

awk 'NR % 2 == 1 { o=[=13=] ; next } { print o "<sep>" [=13=] } END { if ( NR % 2 == 1 ) { print o } }' INPUTFILE

sed -rn 'N;s/\n/ /;p' yourFile

cat file | paste -d' ' - -

我收到的输出是:

USER abc  
_PASS 123  
USER efg  
_PASS 456  

其中 _ 是一个简单的 space。

使用 sed 很容易:

sed 'N;s/\n/ /' file

N 将下一行附加到模式 space,s/\n/ / 将换行符替换为 space。

请注意,如果换行顺序不同,您必须将 \n 更改为正确的顺序:\r\n 用于 Windows 文件,\r 用于旧 Mac 文件格式...

cat file | paste -d' ' - - 应该有效:

$ cat /tmp/t.txt
USER abc
PASS 123
USER efg
PASS 456
USER hil
PASS 789
$ cat /tmp/t.txt | paste -d' '  - -
USER abc PASS 123
USER efg PASS 456
USER hil PASS 789

如果没有,请在您的文件上尝试 运行 dos2unix 以确保其具有正确的行结尾。

粘贴:

paste -sd' \n \n' filename

只需使用 awk:

$ awk '{printf "%s%s", [=10=], (NR%2 ? OFS : ORS)}' file
USER abc PASS 123
USER efg PASS 456
USER hil PASS 789

$ awk '{printf "%s%s", [=10=], (NR%3 ? OFS : ORS)}' file
USER abc PASS 123 USER efg
PASS 456 USER hil PASS 789

$ awk '{printf "%s%s", [=10=], (NR%6 ? OFS : ORS)}' file
USER abc PASS 123 USER efg PASS 456 USER hil PASS 789

请注意您是如何简单地将数字从“2”更改为您想要打印的任何内容,无论您想要连接多少行?尝试使用任何其他已发布的解决方案。