다음과 같은 줄이 포함된 파일이 있습니다.
A
B
C
다음 줄의 복사본과 병합된 각 줄을 포함하는 중복 파일을 bash에 만들고 싶습니다. 예를 들면 다음과 같습니다.
A;B
B;C
C;
답변1
사용 awk
:
awk 'prev{ print prev ";" $0 }
{ prev = $0 }
END { if (NR) print prev ";" }'
귀하의 의견을 바탕으로 주어진
A;B
B;C
C;
답변2
Quick'n'dirty 방식(파일을 두 번 읽는 작업 포함):
$ tail -n+2 file | paste -d';' file -
A;B
B;C
C;
답변3
$ sed 'x;G;s_\n_;_;1d;${p;x;s_$_;_;}' file
A;B
B;C
C;
이 sed
표현식이 하는 일은 다음과 같습니다.
x
: 들어오는 라인을 예약된 공간에 저장하고 이전 라인을 검색합니다.G
: 예약된 공간의 새 행을 이전 행에 추가합니다.s_\n_;_
: 개행 문자를;
.1d
: 첫 번째 줄이면 삭제하고(인쇄하지 않음) 다음 줄로 넘어갑니다.${...;}
: 이게 마지막 줄이라면...p
: 먼저 연결 쌍을 인쇄합니다.x
: 마지막 행 검색s_$_;_
: 마지막에 추가;
답변4
기본적인 아이디어와Torin이 제공한 awk 솔루션:
$ perl -lne 'print "$last;$_" if defined $last; $last=$_;END{print "$last;" if $.}' file
A;B
B;C
C;
또는 전체 단순성을 선호하는 경우:
$ perl -lne'$.>1?print"$l;$_":1;$l=$_}{print"$l;"if$.' file
A;B
B;C
C;