他のファイルの親と子の値を使用してUnixでファイルをgrepする方法

他のファイルの親と子の値を使用してUnixでファイルをgrepする方法

ファイル名を含む特定のファイルでgrepを実行する方法を尋ねたいです。 grepの条件は他のファイルから来ます。例:

fileA.txt には以下が含まれます。

newFile0001_1573001341083_123_0.txt
newFile0002_1573001341207_134_0.txt
newFile0003_1573415111000_251_0.txt
newFile0004_1999999999991_238_0.txt
newFile0005_1573002061581_305_0.txt    

fileB.txt には以下が含まれます。

870752450724347692,2019-11-11 00:12:17,1573411337,1573407737,1573414937
870423450725349173,2019-11-11 00:21:08,1573411868,1573408268,1573415468
868909450732354559,2019-11-11 00:56:43,1573414003,1573410403,1573417603

2番目の列は日付/時刻です。

3番目の列はエポックの日付/時刻です。

4番目の列は日付/時間 - 1時間(epoch)です。

5番目の列は日付/時刻+ 1時間(epoch)です。

-

fileA.txtをgrepする方法(一致するすべてのnewFile0000_XXXXXXXXXX000_000_0.txtを取得する)

4番目の列(下限)と5番目の列(上限)をfileB.txtの各行の範囲として使用しますか?

したがって、例では、fileA.txtの3番目のエントリはfileB.txtの2番目のエントリに基づいて取得する必要があります。

ベストアンサー1

使用awk:

awk -F, 'NR==FNR { myArray[$0]=substr($0,13,10); next } 
                 { for (file in myArray) {
                       if (myArray[file]>=$4 && myArray[file]<=$5) 
                           { print file; delete myArray[file] }
                       }
                 }' fileA.txt fileB.txt

複数の区切り文字を使用する代わりに使用できます。最初のコードブロックを次に変更します。

NR==FNR { myArray[$0] = $2/1000; next }

次のように実行します。

awk '...awk-script...' FS=_ fileA.txt FS=, fileB.txt

おすすめ記事