разделив все числа в файле с помощью сценариев оболочки

Весь фрагмент скрипта оболочки может быть заменен на:

awk '/depends on/ { print $4}' log_file.txt | sed -e 's/\.$//' | sort -u > missing_packages.txt

Скрипт sed удаляет трейлинг . из имён пакетов, в которых во входной строке нет информации о версии.

1
04.04.2018, 20:17
2 ответа

Да, awk -v c=2 '{ print $0/c }' test_1напечатает только первый столбец, так как попытается разделить каждую полную строку с помощью c. Преобразование строки в одно число отбрасывает все, что не является числом, т.е. первый пробел и все после него.

Вместо этого вам нужно перебирать столбцы:

awk -v c=2 '{ for (i = 1; i <= NF; ++i) $i /= c; print }' OFS='\t' test_1

Этот код просто устанавливает значение каждого столбца равным самому себе, деленному на c, а затем печатает строку с измененными значениями. NF— количество полей (столбцов )в текущей строке, а $i— значение в столбце i. OFS='\t'в конце устанавливает разделитель полей вывода на символ табуляции.

Результат для заданных данных будет

0       0       0       0       0       0       0       1       0       0       0       0       0       0       0       0       0       0       0
8       10      12      10      10      5       3       14      18      5       13      7       12      12      12      15      12      15      12
1       4       1       2       1       0       0       5       4       1       3       0       3       2       2       3       1       5       1
7       6       11      8       9       5       3       10      14      4       10      7       9       10      10      12      11      10      11
0       0       0       0       0       0       0       1       1       0       0       0       0       0       0       0       0       1       0
8       10      12      10      10      5       3       15      18      5       13      7       12      12      12      14      11      15      12
0       1       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
2
27.01.2020, 23:32

Ужасно близко, но нужно разделить каждый столбец по отдельности:

awk -v denominator=2 '{ for( i=0;i<=NF;i++ ) { printf "%f%s",  $i/denominator, OFS }; printf "%s", ORS  }' /path/to/file
0
27.01.2020, 23:32

Теги

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