最初の列と出力ファイルの違いを持つテキストファイルのマージ

最初の列と出力ファイルの違いを持つテキストファイルのマージ

ファイル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入出力区切り記号の設定
  • -j2つのファイルに結合フィールドを定義する
  • -a両方のファイルでペアリングできない行を印刷するには、強制的に接続してください。
  • -e空のフィールドを埋める方法を指定する
  • -o出力形式です
  • awkまず、出力フィールド区切り記号をOFSタブに設定します。
  • 5番目のフィールド$5は、2番目と4番目のフィールドに基づいて計算されます。
  • ファイルの最初の行の場合は、5番目のフィールドをタイトルとしてフォーマットします。

関連情報