列比較に基づいて2つのファイルデータを結合する

列比較に基づいて2つのファイルデータを結合する

以下に示すように、それぞれタイムスタンプと数を含む2つのファイルがあります。

ファイル1.txt

   9 2016-06-22
   3 2016-06-23
   2 2016-06-24
   1 2016-06-25
   2 2016-06-26
   2 2016-06-27

ファイル2.txt

   3 2016-06-23
   2 2016-06-25
   5 2016-06-27

両方のファイルの日付列(col-3)を使用して出力を生成し、次のようにリンクされた出力を生成したいと思います。

予想される結果:

   9   2016-06-22
   3 3 2016-06-23
   2   2016-06-24
   1 2 2016-06-25
   2   2016-06-26
   2 5 2016-06-27

貼り付けコマンドの使用は非常に複雑で、予想される出力を取得するには手動操作が必要です。誰でも私を助けることができますか?

ありがとうございます。

ベストアンサー1

最善の解決策は、join次のコマンドを使用することです。

join -j 2 -a 1 -e " " -o 1.1 2.1 1.2 File1.txt File2.txt

これはよりエレガントな解決策ではありませんが、シェルスクリプトを学びたい場合は、次のように作業を完了する必要があります。

while read line1; do
    file1_number=$(echo ${line1} | cut -d ' ' -f 1)
    file1_date=$(echo ${line1} | cut -d ' ' -f 2)
    line2=$(grep ${file1_date} File2.txt)
    file2_number=$(echo ${line2} | cut -d ' ' -f 1)
    if [[ -z "${file2_number}" ]]; then
        file2_number=" "
    fi
    echo ${file1_number} "${file2_number}" ${file1_date}
done < File1.txt

おすすめ記事