com awk
:
awk 'NR!=1{print x"-"$0}{x=$0}' file
-
NR!=1
se aplica a todas as linhas, exceto a primeira -
print x"-"$0
imprime os valores com um traço entre -
x=$0
setx
(para a próxima iteração)
Eu tenho um arquivo de texto como este:
a
b
c
d
e
f
g
Como posso agrupar essas linhas para obter uma saída como esta:
a-b
b-c
c-d
d-e
e-f
f-g
Eu tenho que fazer isso no shell (sh, csh, bash).
Eu encontrei isto:
cat file | xargs -n2
mas o último elemento do primeiro grupo não se tornou o primeiro do segundo.
Com POSIX sed
:
sed '1{
h
d
}
H
x
s/\n/-/
' <file
ou versão de uma linha:
sed -e '1{h;d' -e\} -e 'H;x;s/\n/-/' <file
paste -d- - ./infile <infile
^ Isso funcionaria muito bem, exceto que sua entrada está fora de sintonia. Então ...
{ echo; cat <infile; } | paste -d- - ./infile | sed '1d;$d'
... funcionaria, mas talvez seja muito complicado ...
Mais um sed
sed '$!N;s/\n/-/p;s/-/\n/;D' <input
e pode ser modificado (graças ao mikeserv ):
sed -n 'N;y/\n/-/;P;y/-/\n/;D' <input
Uma versão pura do 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
Tags text-processing shell