両方のファイルの文字列を比較し、出力をマージします。

両方のファイルの文字列を比較し、出力をマージします。

あるファイルからドメインの帯域幅を取得し、別のファイルからクリックの詳細を取得しようとします。

両方のファイルの形式は次のとおりです。

  1. 帯域幅.txt

    aadrivingschool.ws       2840.36M
    aaspak.org               211.57M
    aasteknik.com            1419.26M
    aatonerpk.com            14.87M
    
  2. ヒット.txt:

    onlinestudyboard.com   received  186     hits  from  31/May/2016  at  1201
    aaspak.org             received  184     hits  from  31/May/2016  at  1202
    khawajarubber.com      received  183     hits  from  31/May/2016  at  1246
    aatonerpk.com          received  182     hits  from  31/May/2016  at  1231
    

私が得たいものは:

onlinestudyboard.com       received  186     hits  from  31/May/2016  at  1201 
aaspak.org                 received  184     hits  from  31/May/2016  at  1202  211.57M
khawajarubber.com          received  183     hits  from  31/May/2016  at  1246
aatonerpk.com              received  182     hits  from  31/May/2016  at  1231  14.87M

ベストアンサー1

awk1つの方法は次のとおりです。

$ awk 'FNR==NR{a[$1]=$2; next} {print $0,a[$1]}' bandwidth.txt hits.txt
onlinestudyboard.com     received  186     hits  from  31/May/2016  at  1201 
aaspak.org               received  184     hits  from  31/May/2016  at  1202 211.57M
khawajarubber.com        received  183     hits  from  31/May/2016  at  1246 
aatonerpk.com            received  182     hits  from  31/May/2016  at  1231 14.87M

説明する

awk入力ファイルを1行ずつ読み、行をスペース(または指定された項目-F)のフィールドに分割します。これらのフィールドは$1$ 2 ...$ N`です。

  • NR==FNR:NRは現在の行番号、FNRは現在のファイルの行番号です。最初のファイルを読み取る場合のみ、両方とも同じです。
  • a[$1]=$2; next:これが最初のファイルの場合(上記を参照)、キーが最初のフィールドである配列に2番目のフィールドを保存します。
  • print $0,a[$1]:現在の行()と最初のフィールドに関連付けられた配列$0の値を印刷します。aこれにより、2番目のファイルの現在の行と1番目のファイルの最初のフィールドに関連するすべての値が印刷されます。

おすすめ記事