次のテキストファイルがあります。
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