将文本文件与第一列和输出文件中的差异合并

将文本文件与第一列和输出文件中的差异合并

文件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不匹配的行。还要对最终输出文件中的计数进行求差。

我曾尝试结合joinawk命令,但没有得到所需的输出。

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

一起使用joinawk

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 个字段计算得出的
  • 如果它是文件中的第一行,则将第五个字段格式化为标题

相关内容