次のようなテキストファイルがあります。
a
b
c
d
e
f
g
これらの行をグループ化して、次のような出力を取得するにはどうすればよいですか。
a-b
b-c
c-d
d-e
e-f
f-g
これはシェル(sh、csh、bash)で行う必要があります。
私はこれを見つけました:
cat file | xargs -n2
しかし、最初のグループの最後の要素は、2番目のグループの最初の要素にはなりません。
次のようなテキストファイルがあります。
a
b
c
d
e
f
g
これらの行をグループ化して、次のような出力を取得するにはどうすればよいですか。
a-b
b-c
c-d
d-e
e-f
f-g
これはシェル(sh、csh、bash)で行う必要があります。
私はこれを見つけました:
cat file | xargs -n2
しかし、最初のグループの最後の要素は、2番目のグループの最初の要素にはなりません。
回答:
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
^入力が1つずれる場合を除き、これは非常にうまく機能します。そう...
{ 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 ///を置き換えることができます。使用した場合、\ nより速く、移植性があり、\ n短くなります。