Логика сопоставления файлов Unix

Вы можете получить количество минут, кратное 15 меньше, чем текущие минуты (или минуты, указанные в первом параметре ), с помощью:

a=$(date date -d "2011-02-23 01:05" +%-m)        # need only minutes.
a=${1:-"$a"}                   # or use the value from the first parameter.
a=${a#0}                       # remove one optional leading zero to
                               # avoid issues with 08 and 09.
b=$((a-a%15))                  # Round down to a 15 minutes multiple.
c=$((b+15))                    # end time

echo "$b $c"

Если вам нужна полная строка даты, используйте:

$ printf 'java %s%02d\n' "$(date -d "2011-02-23 01:05" +"%Y:%m:%d %H:")" "$b"
java 2011:02:23 01:00

Или, в баше:

$ printf -v a '%(%s)T\n' -1
$ printf '%(java %Y-%m-%d %H:%M:%S)T\n' "$(( a - a % (60*15) ))"
java 2018-08-30 22:45:00
-2
28.05.2021, 16:06
1 ответ

Если вы хотите сопоставить столбец 3 файла1 со столбцом 4 файла2, вы можете использоватьawk:

awk -F'\t' '
  NR==FNR{ arr[$4]; next }
  { print > (($3 in arr) ? "file3" : "file4") }
' file2 file1

Сначала считывается файл2, а четвертое поле в массиве arrсохраняется как индекс.
Затем прочитайте файл1 и printкаждую запись. Если в массиве существует третье поле, перенаправьте вывод в файл3, в противном случае — в файл4.

0
28.07.2021, 11:28

Теги

Похожие вопросы