如何将文件中的行分成两行?

Cos*_*man 9 shell text-processing

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

a
b
c
d
e
f
g
Run Code Online (Sandbox Code Playgroud)

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

a-b
b-c
c-d
d-e
e-f
f-g
Run Code Online (Sandbox Code Playgroud)

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

我发现了这个:

cat file | xargs -n2
Run Code Online (Sandbox Code Playgroud)

但是第一组的最后一个元素没有成为第二组的第一个。

cha*_*aos 9

awk

awk 'NR!=1{print x"-"$0}{x=$0}' file
Run Code Online (Sandbox Code Playgroud)
  • NR!=1 适用于所有行,除了第一行
  • print x"-"$0 用破折号打印值
  • x=$0设置x(用于下一次迭代)


cuo*_*glm 5

使用 POSIX sed

sed '1{
  h
  d
}
H
x
s/\n/-/
' <file
Run Code Online (Sandbox Code Playgroud)

或单线版本:

sed -e '1{h;d' -e\} -e 'H;x;s/\n/-/' <file
Run Code Online (Sandbox Code Playgroud)


mik*_*erv 5

paste -d- - ./infile <infile
Run Code Online (Sandbox Code Playgroud)

^那会非常有效,只是您的输入是一对一的。所以...

{ echo; cat <infile; } | paste -d- - ./infile | sed '1d;$d'
Run Code Online (Sandbox Code Playgroud)

...会起作用,但可能太复杂了...