두 개의 텍스트 파일을 비교/정렬해야 합니다.

두 개의 텍스트 파일을 비교/정렬해야 합니다.

이것이 바로 그 장면이다. 나는 File1과 File2를 가지고 있고 File3에서 결과를 얻고 싶습니다. 저는 Linux를 처음 접했지만 지금까지 sort, diff 및 comm을 사용해 보았습니다. 그러나 지금까지는 운이 좋지 않았습니다.

File1.txt File2.txt > File3.txt

파일 1.txt

RB0009  8,89
RB0010  5,67
RB0015  4,32
RB0027  6,56

파일 2.txt

RB0009  8,89
RB0010  5,67
RB0015  4,32
RB0027  6,56
RB0033  9,78

파일 3.txt

RB0009  700111i 8,89
RB0010  700092i 5,67    
RB0015  700148i 4,32
RB0027  700123i 6,56

도움을 주셔서 감사합니다.

답변1

아래 내 의견에 따르면 질문을 오해 한 것 같습니다. 이것~해야 한다예상되는 출력을 제공합니다.

paste File1.txt File2.txt | awk '{print $1"\t" "700" NR "i" "\t" $2}' > File3.txt

오해는 다음과 같습니다.


File1.txt제가 올바르게 이해했다면 두 개의 입력 파일( 및 ) 이 있고 두 입력 파일의 정렬 및 결합된 내용을 포함하는 출력 파일( )을 File2.txt생성하시겠습니까 ?File3.txt

각 파일의 첫 번째 열이 고유 식별자(예: 등)이고 이러한 식별자를 일치시켜 두 파일을 결합하려는 경우 RB0009Linux RB0010에서 join이 명령을 사용할 수 있습니다.

다음은 원하는 작업을 수행하는 명령의 예입니다.

join -t $'\t' -a 1 -a 2 -o auto <(sort File1.txt) <(sort File2.txt) > File3.txt

명령 분석:

  • join두 파일을 연결하는 데 사용하는 명령입니다.

  • -t $'\t'필드 구분 기호로 join탭 문자( )를 사용함을 나타냅니다 .\t

  • -a 1 -a 2join일치하는 항목이 없더라도 두 파일의 모든 행이 포함됨을 나타냅니다 .

  • -o autojoin탭으로 구분된 두 파일의 필드를 출력 하도록 지시합니다 .

  • <(sort File1.txt)프로세스 대체 이며 각 파일 <(sort File2.txt)의 내용을 join.join

  • >명령 출력을 join로 리디렉션합니다 File3.txt.

결과에는 File3.txt첫 번째 열(고유 식별자)을 기준으로 정렬된 두 입력 파일의 결합된 콘텐츠가 포함되어야 합니다.

관련 정보