我有一个这样的文本文件:
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
但第一组的最后一个元素没有成为第二个的第一个。
我有一个这样的文本文件:
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
但第一组的最后一个元素没有成为第二个的第一个。
Answers:
使用POSIX sed
:
sed '1{
h
d
}
H
x
s/\n/-/
' <file
或单线版本:
sed -e '1{h;d' -e\} -e 'H;x;s/\n/-/' <file
paste -d- - ./infile <infile
^这将非常有效,只不过您的输入是一对一的。所以...
{ echo; cat <infile; } | paste -d- - ./infile | sed '1d;$d'
会工作,但可能太复杂了
sed
不做任何事情。
sed 1d\;\$d
更正它。
sed '2~2p' infile | paste -d- - -
paste -d- <(head -n -1 input) <(tail -n +2 input)
多一个 sed
sed '$!N;s/\n/-/p;s/-/\n/;D' <input
并可以进行修改(感谢mikeserv):
sed -n 'N;y/\n/-/;P;y/-/\n/;D' <input
y/-\n/\n-/
可以同时替换两个s ///。如果这样做的话,它可以更快,更便于携带和使用。