Модуль ZFS не сообщается в буферах+кэшированном
я обновляю свой инструмент анализатора памяти, который помогает находить подобные проблемы
Вы можете использовать Awk
скрипт для этого. Проанализируйте оба файла, пропуская заголовки, создайте хэш-карту содержимого file2
и file1
, если присутствует значение столбца 1 из другого файла, напечатайте его значение (иначе) напечатайте пользовательскую строку 00
, как вы показали.
#!/usr/bin/env awk
BEGIN {
printf "hour value1 value2\n"
}
NR>1 && FNR==NR {
hash[$1]=$2; next
}
FNR>1 {
if ($1 in hash) {
printf "%s\t%s\t%s\n",$1,$2,hash[$1]
} else {
printf "%s\t%s\t%s\n",$1,$2,"00"
}
}
Запустите этот скрипт как
awk -f script.awk file2 file1
hour value1 value2
01 25 03
02 24 00
03 24 05
04 27 00
05 30 03
, что должно дать вам необходимый вывод.
То же самое можно сделать и с однострочной нечитаемой версией командной строки.
awk 'BEGIN{printf "hour value1 value2\n"} NR>1 && FNR==NR{hash[$1]=$2; next} FNR>1 { if ($1 in hash) {printf "%s\t%s\t%s\n",$1,$2,hash[$1] } else {printf "%s\t%s\t%s\n",$1,$2,"00"} }' file2 file1
Если вы уже отсортировали (по значению поля час
) входные файлы, рассмотрите возможность использования конвейера join + awk :
join --header -a1 file1 file2 | awk 'NF<3{ $0=$0 OFS "00" }1' | column -t
Вывод:
hour value1 value2
01 25 03
02 24 00
03 24 05
04 27 00
05 30 03
-a1
- печатает непарные строки из файла 1
NF<3{ $0=$0 OFS "00" }
- заменяет несовпадающее пустое поле на 00
$ join -o1.1,1.2,2.2 -a1 -e 00 file1 file2 | column -t
hour value1 value2
01 25 03
02 24 00
03 24 05
04 27 00
05 30 03
С помощью -o1.1,1.2,2.2
мы указываем, какие выходные поля этой операции реляционного соединения мы хотим видеть. Формат для этого file_number.field_number
.
С помощью -a1
мы говорим, что хотели бы иметь все строки из первого файла, даже если они ничему не соответствуют во втором файле.
С помощью -e 00
мы говорим, что любые отсутствующие значения должны быть заменены строкой 00
.
Это предполагает, что два файла отсортированы одинаково.