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)
但是第一组的最后一个元素没有成为第二组的第一个。
与awk
:
awk 'NR!=1{print x"-"$0}{x=$0}' file
Run Code Online (Sandbox Code Playgroud)
NR!=1
适用于所有行,除了第一行print x"-"$0
用破折号打印值x=$0
设置x
(用于下一次迭代)使用 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)
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)
...会起作用,但可能太复杂了...