다음과 같은 텍스트 파일이 있습니다.
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
그러나 첫 번째 그룹의 마지막 요소는 두 번째 그룹의 첫 번째 요소가 되지 않습니다.
답변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
또는 한 줄 버전:
sed -e '1{h;d' -e\} -e 'H;x;s/\n/-/' <file
답변3
paste -d- - ./infile <infile
^이것은 완벽하게 작동합니다. 입력 내용이 하나씩 다릅니다. 그래서...
{ 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