첫 번째 열과 출력 파일의 차이점이 있는 텍스트 파일 병합

첫 번째 열과 출력 파일의 차이점이 있는 텍스트 파일 병합

파일 1:( text1.txt)

Row_Added_Ts    Count   
01/01/14        2022448     
02/01/14        8345155   
03/01/14        8663852  
04/01/14        6785739  
05/01/14        5279913  

파일 2: text2.txt( )

Row_Added_Ts    Count  
01/01/14    211      
02/01/14    1598    
03/01/14    1710    
05/01/14    5279913  
06/01/14    7953261 

결과물 파일:

Row_Added_Ts    Count       Row_Added_Ts    Count   Difference  
01/01/14        2022448     01/01/14    211         2022237  
02/01/14        8345155     02/01/14    1598        8343557  
03/01/14        8663852     03/01/14    1710        8662142  
04/01/14        6785739     04/01/14    0           6785739  
05/01/14        5279913     05/01/14    5279913     0  
06/01/14        0           06/01/14    7953261     -7951831  

요구 사항은 2개의 파일을 병합하고 0일치하지 않는 줄을 채우는 것입니다. 또한 최종 출력 파일의 개수도 다릅니다.

join및 명령을 결합해 보았지만 awk원하는 출력을 얻지 못했습니다.

join -j 2 -o 1.1 1.2 2.1 2.2 text1.txt text2.txt  

awk 'BEGIN {FS = OFS = "/t"}
NR == FNR {f[$1] = $0 next}
  {print f[$1]   $0}' text2.txt text1.txt

join또는 에서도 작업 sort할 수 없습니다.shkshbash

답변1

join다음과 함께 사용하세요 awk:

join -t $'\t' -j 1 -a 1 -a 2 -e 0 -o 0,1.2,0,2.2 file1 file2 | \
  awk 'OFS="\t"{$5=$2-$4}NR==1{$5="Difference"}1'

어디:

  • -t입력 및 출력 구분 기호 설정
  • -j두 파일에 조인 필드 정의
  • -a두 파일에서 페어링할 수 없는 줄을 인쇄하려면 강제로 연결하세요.
  • -e빈 필드를 채우는 방법 지정
  • -o출력 형식 입니다
  • awk먼저 출력 필드 구분 기호를 OFS탭으로 설정하십시오.
  • 5번째 필드 $5는 2번째와 4번째 필드를 기반으로 계산됩니다.
  • 파일의 첫 번째 줄인 경우 다섯 번째 필드를 제목으로 형식을 지정합니다.

관련 정보