Разбор файла по парам идентификаторов и значениям выше-ниже

Ну, как упоминалось в комментарии к вашему вопросу, dd параметры bs , seek , skip и count - ваши друзья. Кроме того, я бы логично разделил ваши изображения на список фрагментов подходящего размера (скажем, по 10 МБ каждый) и поддержал бы md5sum каждого фрагмента (или более длинный хэш, если вы опасаетесь коллизий, чего я бы не стал). Когда появляется новый образ, вам нужно только проверить новый образ по хэшам (практически вдвое сократить время сравнения) и скопировать на диск только измененные фрагменты. Вы даже можете обнаружить, что некоторые из ваших фрагментов идентичны (возможно, все нули), и соответствующим образом выполнить дальнейшую оптимизацию.

1
25.07.2017, 04:09
2 ответа

Опираясь на ответ pfnuesel ,

{
    split($3, a, "|")
    split($4, b, "|")
    if (a[2] > b[2]){
        $3=b[1]"|"b[2]
        $4=a[1]"|"a[2]
    }
    key=$3" "$4
    split(arr[key], c, " ")
    if ($8 > c[8]  ||  ($8 == c[8] && $7 > c[7])){
        arr[key] = $0
    }
}
END{
    for (item in arr){
        print(arr[item])
    }
}

Это предполагает,как показано (, но явно не указано )в вопросе, что значения в третьем и четвертом столбцах имеют вид

some_string | number

где пробелы даны только для иллюстрации, и строка не содержит символов |. Эти токены должны быть отсортированы на основе значений числа s; префиксы строки не сравниваются.

Как и в ответе pfnuesel , используется

awk -f script.awk file1

Точный интервал во входном файле теряется, но читаемый интервал между столбцами может быть (повторно )создан путем передачи через column -t; например,

awk -f script.awk file1 | column -t > file2
0
27.01.2020, 23:33

Вот не -изящное awkрешение:

{
    split($3, a, "|")
    split($4, b, "|")
    if (a[2] > b[2]){
        $3=b[1]"|"b[2]
        $4=a[1]"|"a[2]
    }
    split(arr[$3" "$4], c, " ")
    if ($8 > c[8]){
        arr[$3" "$4] = $0
    }
}
END{
    for (item in arr){
        print(arr[item])
    }
}

Выполнить с

awk -f script.awk input

Он не сохраняет интервал, и порядок является случайным.

2
27.01.2020, 23:33

Теги

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