在 Bash 中连接行

问题描述 投票:0回答:6

大多数命令行程序一次只运行一行。

我可以使用常见的命令行实用程序(echo、sed、awk 等)来连接每组两行,还是需要从头开始编写脚本/程序来执行此操作?

$ cat myFile
line 1
line 2
line 3
line 4

$ cat myFile | __somecommand__
line 1line 2
line 3line 4
sed awk
6个回答
12
投票
sed 'N;s/\n/ /;'

抓住下一行,并用空格替换换行符。

seq 1 6 | sed 'N;s/\n/ /;'
1 2
3 4
5 6

8
投票
$ awk 'ORS=(NR%2)?" ":"\n"' file
line 1 line 2
line 3 line 4

$ paste - -  < file
line 1  line 2
line 3  line 4

1
投票

不是特定命令,但这段 shell 应该可以解决问题:

cat myFile | while read line; do echo -n $line; [ "${i}" ] && echo && i= || i=1 ; done

1
投票

您还可以将 Perl 用作:

$ perl -pe 'chomp;$i++;unless($i%2){$_.="\n"};' < file
line 1line 2
line 3line 4

1
投票

这是一个不需要切换标志的 shell 脚本版本:

while read line1; do read line2; echo $line1$line2; done < inputfile

0
投票

如果专门针对每隔一行,那么根本不用费心做模数或

regex
:

 echo '
line 1
line 2
line 3
line 4' |
awk 'ORS = (_ = !_) ? FS : RS'
line 1 line 2
line 3 line 4

这个想法是使用一个虚拟布尔变量,它不断反转自身,并为奇数行生成 TRUE (

1
)。

© www.soinside.com 2019 - 2024. All rights reserved.