Bash - 与下面的连接线连接

时间:2017-05-15 14:02:06

标签: bash awk sed cat

我需要将文本文件与几行连接起来。这是我的情况:

QStackedLayout

依旧......

我需要这样的输出:

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=$0 ; next } { print o "<sep>" $0 } 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 是一个简单的空间。

4 个答案:

答案 0 :(得分:0)

简单的sed:

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

N将下一行附加到模式空间,s/\n/ /用空格替换换行符。

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

答案 1 :(得分:0)

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以确保其具有正确的行结尾。

答案 2 :(得分:0)

带粘贴:

paste -sd' \n \n' filename

答案 3 :(得分:0)

只需使用awk:

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

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

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

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