4

我有如下数据:

abcd
join abcd
efgh
join efgh

我想将两个连续的对连接成一条线。结果:

abcd join abcd
efgh join efgh

我怎样才能在 Perl/AWK 中做到这一点?

4

6 回答 6

13
$ sed 'N;s/\n/ /' input.txt
abcd join abcd
efgh join efgh
于 2012-04-19T01:23:05.440 回答
8

最简单的方法是:

paste - - < FILE

这使用空格而不是制表符连接:

paste -d" " - - < FILE
于 2012-04-19T01:49:28.197 回答
4

珀尔:

perl -pe's/\n/ / if $. % 2' file

高尔夫挑战:将上述内容缩短 5 个字符。

高尔夫挑战解决方案:

perl -pe'$.%2&&s/
/ /' file
于 2012-04-19T02:32:45.393 回答
3
cat input | paste -sd' \n'

如果给出列表,则粘贴在分隔符之间交替。

于 2015-04-10T23:50:00.987 回答
2

我的第一直觉:

perl -lne 'if ($. % 2) { $last = $_; } else { print "$last $_" }'

受@kev 的 sed 解决方案启发的更简洁的版本:

perl -lpe '$_ .= " " . <>; chomp'

但我认为 sed 赢得了这一轮。

于 2012-04-19T01:22:51.947 回答
2
awk '{getline a; printf "%-s\n", $0 " " a}' file 
于 2012-04-19T08:21:53.020 回答