텍스트 파일의 이전 줄을 현재 줄로 복사

텍스트 파일의 이전 줄을 현재 줄로 복사

다음과 같은 줄이 포함된 파일이 있습니다.

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;

관련 정보