파일에서 라인을 두 개씩 그룹화하는 방법은 무엇입니까? 그룹화하여 다음과 같은

다음과 같은 텍스트 파일이 있습니다.

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

그러나 첫 번째 그룹의 마지막 요소는 두 번째 그룹의 첫 번째 요소가되지 않았습니다.



답변

awk:

awk 'NR!=1{print x"-"$0}{x=$0}' file
  • NR!=1 첫 번째 줄을 제외한 모든 줄에 적용
  • print x"-"$0 사이에 대시를 사용하여 값을 인쇄하십시오.
  • x=$0설정 x(다음 반복)

답변

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 '$!N;s/\n/-/p;s/-/\n/;D' <input

수정 될 수 있습니다 ( mikeserv 덕분에 ).

sed -n 'N;y/\n/-/;P;y/-/\n/;D' <input

답변

순수한 배쉬 버전-

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