ファイル名を含む特定のファイルで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