У меня есть 2 файлов, о которых я в настоящее время манипулируют каждый из них в AWK:Баш - слияния и манипулирования 2 файлов
===================== == Файл 1: ===================
0x0002 RUNNING EXISTS foo 253 65535
0x0003 RUNNING EXISTS foo 252 5
0x0004 RUNNING EXISTS foo 251 3
Я заинтересован в первом поле и последняя 2.
поле 1 : vdisk (в шестнадцатеричном формате). Последние два поля являются возможными Cdisks для каждого vdisk. По крайней мере, 1 должен существовать. значения десятичные. Если появляется число «65535», это означает, что 2-й cdisk не существует.
Я использую эту AWK для отображения удобного стола:
awk 'BEGIN {print "vdisk cdisk Mr_cdisk"}
{
if ($3 ~ /EXISTS|THIS_AGENT_ONLINE/) {
sub("65535", "N/A")
printf "%-11s %-6s %s\n",$1,$(NF-1),$(NF)
}
}' ${FILE}
будет производить эту таблицу:
vdisk cdisk Mr_cdisk
0x0002 253 N/A
0x0003 252 5
0x0004 1 3
================ ======= Файл 2: ===================
0x0000 Cmp cli Foo 0 SOME 0 0x0 0x0 0x0
0x0001 Cmp own Foo 1 NONE 0 0x0 0x0 0x0
0x0002 Cmp cli Foo 0 SOME 0 0x0 0x1 0x0
0x0003 Cmp own Foo 0 NONE 0 0x0 0x0 0x1
0x0004 Cmp cli Foo 0 SOME 0 0x0 0x0 0x0
0x0005 Cmp own Foo 1 NONE 0 0x1 0x0 0x0
Я заинтересован в "КСС собственные" линии, в которой первым полем является Cdisk (в шестнадцатеричном формате). Пятое поле с конца (непосредственно перед текстом SOME/NONE) - это номер экземпляра. Это либо 0, либо 1. Я использую эту AWK для отображения удобного стола:
awk 'BEGIN {print "cdisk(hex) RACE_Instance"}
/Cmp own/ {
printf "%-11s %-10s\n",$1,$(NF-5)
}' ${FILE};
Это будет производить в следующей таблице:
cdisk(hex) Instance
0x0001 1
0x0003 0
0x0005 1
+++++++++++ +++++++++++++++++++++
Что бы я хотел показывать объединенную таблицу. Предпочтительно, непосредственно из исходных файлов. Он должен распространять первые данные на 2 строки (если их больше 1 cdisk). Это будет основой для слияния. Затем напечатайте номер экземпляра, если он существует в этом cdisk.
vdisk(hex) cdisk(hex) Instance
0x0002 0x00fd N/A
0x0003 0x00fc N/A
0x0003 0x0005 1
0x0004 0x0001 0
0x0004 0x0003 1
Я бы предпочел решение с awk. :)
Спасибо!
EDIT: добавлена дополнительная информация и исправлена одна таблица данных.
EDIT2: Упрощенный ввод
Итак, какие вы пытаетесь слиться? Вам все еще нужны отдельные таблицы, или вы ищете способ перейти непосредственно от входных файлов к окончательному результату? –
Я бы предпочел получить конечный результат напрямую. Мне нужно объединить поле cdisk. Каждый «vdisk» может иметь максимум 2 «cdisk». Либо поле cdisk или/и "Mr_cdisk". –
Я думаю, что с небольшим усилием вы могли бы облегчить нам задачу, чтобы понять и помочь нам помочь вам.Избавьтесь от -non-decimal флага данных и уменьшите ваш входной вывод образца до 3 или 4 строк из 3 или 4 разделенных пробелами полей, которые представляют вашу текущую проблему. –