ファイルの行を2行にグループ化する方法は?

ファイルの行を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番目のグループの最初の要素になりません。

答え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

または1行バージョン:

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

答え3

paste -d- - ./infile <infile

^これは完璧に動作します。入力内容が1つずつ異なります。だから...

{ 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

関連情報