Печать переменной в файле вместе с некоторыми существующими столбцами

Драйвер ION содержит аргумент команды ioctl «ION _IOC _HEAP _QUERY», который может использоваться для получения информации о кучах (имя, тип, идентификатор и т. д. ), включен на бетонная площадка. Пример реализации был найден по следующей ссылке :

int ion_query_heap_cnt(int fd, int* cnt) {
    int ret;
    struct ion_heap_query query;
    memset(&query, 0, sizeof(query));
    ret = ion_ioctl(fd, ION_IOC_HEAP_QUERY, &query);
    if (ret < 0) return ret;
    *cnt = query.cnt;
    return ret;
}

int ion_query_get_heaps(int fd, int cnt, void* buffers) {
    int ret;
    struct ion_heap_query query = {
       .cnt = cnt,.heaps = (uintptr_t)buffers,
    };
    ret = ion_ioctl(fd, ION_IOC_HEAP_QUERY, &query);
    return ret;
}

Пример использования этого API можно найти здесь:

static int find_ion_heap_id(int ion_client, char* name)
{
    int i, ret, cnt, heap_id = -1;
    struct ion_heap_data *data;
    ret = ion_query_heap_cnt(ion_client, &cnt);
    if (ret)
    {
        AERR("ion count query failed with %s", strerror(errno));
        return -1;
    }
    data = (struct ion_heap_data *)malloc(cnt * sizeof(*data));
    if (!data)
    {
        AERR("Error allocating data %s\n", strerror(errno));
        return -1;
    }
    ret = ion_query_get_heaps(ion_client, cnt, data);
    if (ret)
    {
        AERR("Error querying heaps from ion %s", strerror(errno));
    }
    else
    {
        for (i = 0; i < cnt; i++) {
            struct ion_heap_data *dat = (struct ion_heap_data *)data;
            if (strcmp(dat[i].name, name) == 0) {
                heap_id = dat[i].heap_id;
                break;
            }
        }
        if (i > cnt)
        {
            AERR("No System Heap Found amongst %d heaps\n", cnt);
            heap_id = -1;
        }
    }
    free(data);
    return heap_id;
}

Следующая функция может быть просто переписана для получения идентификатора кучи _из типа кучи _.

После того, как мы получили идентификатор кучи _, нам нужно вычислить:

heap_mask = (1 << heap_id);

1
22.05.2019, 14:19
1 ответ
awk 'BEGIN { c1 = 5 } { print c1, $0 } FNR%200 == 0 { ++c1 }' file

Это инициирует переменную c1в 5 в начале программы awk. Затем все входные строки печатаются с предшествующим текущим значением этой переменной.

Для любой строки, чей номер строки(FNR)кратен 200, эта переменная будет увеличиваться на 1 после печати строки.

Увеличение до c1произойдет после печати строки 200, 400 и т. д.

По умолчанию разделителем между числом и исходными данными будет символ пробела. Измените его на вкладку (или что хотите ), установив OFSв блоке BEGIN(или используя -v OFS='\t'в командной строке awk):

.
awk 'BEGIN { OFS = "\t"; c1 = 5 } { print c1, $0 } FNR%200 == 0 { ++c1 }' file

Перенаправьте вывод в файл с новым именем, чтобы сохранить его.

6
27.01.2020, 23:14

Теги

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