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”更改为您想要打印的任何内容,无论您想要连接多少行?尝试使用任何其他已发布的解决方案。
我需要用几行连接一个文本文件。这是我的情况:
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”更改为您想要打印的任何内容,无论您想要连接多少行?尝试使用任何其他已发布的解决方案。