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