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