如何将文件中的行按两行分组?

如何将文件中的行按两行分组?

我有一个像这样的文本文件:

a
b
c
d
e
f
g

如何对这些行进行分组以获得如下输出:

a-b
b-c
c-d
d-e
e-f
f-g

我必须在 shell(sh、csh、bash)中执行此操作。

我发现了这个:

cat file | xargs -n2

但第一组的最后一个元素不会成为第二组的第一个元素。

答案1

awk

awk 'NR!=1{print x"-"$0}{x=$0}' file
  • NR!=1适用于除第一行之外的所有行
  • print x"-"$0打印值,中间用破折号
  • x=$0设置x(用于下一次迭代)

答案2

使用 POSIX sed

sed '1{
  h
  d
}
H
x
s/\n/-/
' <file

或单行版本:

sed -e '1{h;d' -e\} -e 'H;x;s/\n/-/' <file

答案3

paste -d- - ./infile <infile

^这会非常有效,只是你的输入相差一。所以...

{ echo; cat <infile; } | paste -d- - ./infile | sed '1d;$d'

...可以工作,但也许太复杂了...

答案4

纯 bash 版本 -

old=""; while read -r line ; do [[ -n "$old" ]] && echo   $old-$line;   old=$line; done  < input

a-b
b-c
c-d
d-e
e-f
f-g

相关内容