2つのCSVファイルをマージして、もう1つの列がある1つのCSVファイルを作成します。

2つのCSVファイルをマージして、もう1つの列がある1つのCSVファイルを作成します。

2つのCSVファイルがあります。1.csv彼らに電話しましょう2.csv

  • 最初の(1.csv)は次のようになります。

    1,3543
    23,3632
    12,7665
    1,9795
    32,8793
    35,0290
    
  • 2番目のファイル(2.txt)は次のとおりです。

    1,4543
    3,3223
    4,1213
    6,2324
    65,3123
    32,5432
    9,9839
    5,8798
    
  • 最後の列は最初の列と最初の列のoutput.csv違いです。1.csv2.txt

    1,3543,1,4543,0
    23,3632,3,3223,20
    12,7665,4,1213,8
    1,9795,6,2324,-5
    32,8793,65,3123,-23
    35,0290,32,5432,3
    ,,9,9839,NA
    ,,5,8798,NA
    

私はシェルスクリプトに初めて触れました。助けてください

ベストアンサー1

問題は、2つのファイルを結合する共通フィールドがないことです。すぐに 1 つを作成してから awk を再利用して、次のように差を計算できます。

join -a2 -o auto -t, <(awk '{ print NR","$0 }' 1.txt ) <(awk '{ print NR","$0 }' 2.txt) \
    | awk  'BEGIN { 
        FS=OFS="," 
    } 
    { if ($2) { 
        $6=$2-$4 
    } else { 
        $6="NaN" 
    }; 
    print $2,$3,$4,$5,$6  
}'
1,3543,1,4543,0
23,3632,3,3223,20
12,7665,4,1213,8
1,9795,6,2324,-5
32,8793,65,3123,-33
35,0290,32,5432,3
,,9,9839,NaN
,,5,8798,NaN

おすすめ記事