2010-10-22 62 views
9

大多数命令行程序一次只能在一行上运行。Bash中的连接线

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

$ cat myFile 
line 1 
line 2 
line 3 
line 4 

$ cat myFile | __somecommand__ 
line 1line 2 
line 3line 4 

回答

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

抢下一行,用空格替代换行符。

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

OT,但使用'seq 1 6'代替'echo'命令。 – 2010-10-22 17:53:11

+0

@glenn:谢谢。总是在UNIX中学习新东西...... – 2010-10-23 20:34:22

+0

'printf“%s \ n”{1..6} | sed'N; s/\ n//;''。 – ghostdog74 2010-10-26 07:56:12

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 
+3

+1用于粘贴。请注意,默认的分隔符是tab,如果你真的希望你的线条被粉碎,可以使用'-d“”'。 – 2010-10-22 17:52:06

+0

+1贴;)不错的一个! – itshorty 2013-10-08 11:24:54

1

不是特定的命令,但这个片段壳应该做的伎俩:

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

UUOC。 '读线;做echo -n $ line; [“$ {i}”] && echo && i = || i = 1;完成 ghostdog74 2010-10-22 15:34:13

+0

呵呵,在你发布之前,我并不熟悉UUOC。对于简单的情况,我仍然认为即使速度稍慢并且浪费一个过程,猫也会更清楚。 :-) – kanaka 2010-10-22 15:39:46

+1

更清晰?输入重定向不太清楚? :) – ghostdog74 2010-10-22 23:04:48

1

您也可以使用Perl为:

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

欢迎使用这种简短的任何提示:) – codaddict 2010-10-22 17:18:52

+0

'perl -ne'chomp($ p = $ _); $ Q = <>;打印$ p,$ q'文件' – 2010-10-22 17:56:30

+0

@glenn:这很整齐。谢谢。 – codaddict 2010-10-22 18:00:25

1

这里并不需要切换的标志shell脚本版本:

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