![]() |
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| Добавление столбцов двух файлов | chandra321 | Shell программирование и сценарии | 7 | 05-06-2009 01:11 PM |
| Сравнивая аналогичные колонки в двух разных файлах | ragavhere | Shell программирование и сценарии | 13 | 04-16-2008 09:53 AM |
| Сравнение общей колонки таблицы, в двух файлах | ragavhere | SUN Solaris | 1 | 04-11-2008 09:41 AM |
| Сравнивая столбцы из двух файлов | ggopal | Shell программирование и сценарии | 4 | 02-21-2007 08:06 PM |
| Сравнивая столбцы из двух файлов | ggopal | UNIX перспективных И опытных пользователей | 1 | 02-17-2007 04:11 AM |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
сравнение файлов - добавление / вычета / форматирования столбцов
У меня есть два файла:
file1.txt: FS Всего на бесплатном б% / u01 10000 8000 2000 80% / u02 10000 8000 2000 80% / u03 10000 8000 2000 80% / u04 10000 8000 2000 80% / u05 10000 8000 2000 80% / u06 10000 8000 2000 80% / u07 10000 8000 2000 80% / U10 10000 5000 5000 50% file2.txt: FS Adj / u01 1500 / u05 500 / U10 2500 Я хотел бы сравнить их с помощью первой колонке в каждом файле и создавать выход из обоих, что выглядит следующим образом: FS Всего б + Adj свободной Adj (б + Adj) / Всего -------- --------- --------- --------- --------- / u01 10000 9500 500 95% / u02 10000 8000 2000 80% / u03 10000 8000 2000 80% / u04 10000 8000 2000 80% / u05 10000 8500 1500 85% / u06 10000 8000 2000 80% / u07 10000 7500 2500 75% Обратите внимание, что все строки из file1.txt перечислены, а в колонке "ADJ" из file2.txt добавлена колонка "б", и вычитаться из колонки "свободное" от file1.txt только если есть соответствие. Я был в состоянии подготовить этот доклад только после загрузки файлов в базу данных, но я уверен, что я могу сделать это с помощью оболочки сценариев с вашей помощью. Спасибо, Омер |
|
||||
|
Спасибо, radoulov, за быстрые и elegent скриптов. Она работает прекрасно.
Все нужно делать сейчас формат доклада красиво, поэтому более читабельным, но я думаю, я могу, что из цифр. Цените это Омер |
|
||||
|
Привет Radoulov,
Я прочитал ваш сценарий. Eloborate Можете ли вы мне за знаниями. Спасибо. |
|
|||||
|
Конечно. Код:
NR == FNR Приведенные выше выражения возвращает верно лишь при обработке первой входной файл (file2). Таким образом, соответствующие действия: Код:
{
sub(/,/, "")
_[$1] = $2
next
}
Стриптиз тысяч разделитель, заполнить ассоциативный массив _с $ 1 как ключи, $ 2 как ценности, так что с учетом вклада он будет: Код:
key -> "/u01" value -> 1500 key -> "/u05" value -> 500 key -> "/u10" value -> 2500 Определенный артикль следующий заявление силы AWK прекратить обработку текущей записи так никакие дополнительные правила и действия будут выполнены для этой записи. Это означает, что в следующем действия не будут обрабатывать первый входной файл. Код:
FNR == 1 ПЧН это количество записей, которые были прочитаны на сегодняшний день из текущего входного файла (второй входной файл в данном случае). Так, при обработке первый отчет о второй входной файл: Код:
{
printf "%4s %5s %8s %8s %14s\n",
"FS", "Total", "Used+Adj", "Free-Adj", "(Used+Adj)/Total"
while (++i < 46) printf "-"
print ""
next
}
Печать заголовков столбцов и перейти к следующий запись. Код:
$1 in _ {
$3 += _[$1]
$4 -= _[$1]
$5 = $3/$2*100
}
Выражение ключа в массиве Возвращает TRUE, если указанный ключ Имеющиеся в указанном массив. Для тех записей выполните следующие действия: - Добавить ценность _ [$ 1] в соответствующую клавишу $ 1 в третьей колонке - Вычитания стоимости _ [$ 1] в соответствующую клавишу $ 1 в четвертом столбце - Рассчитать стоимость пятой колонке Код:
{
printf "%4s %5d %8d %8d %14d%\n",
$1, $2, $3, $4, $5
}
Печать новых ценностей. Надеюсь, что это помогает. |
|
||||
|
SIMPLY SUPERB!! NO WORDSSSSSSSS будет достаточно СВОЙ ПУТЬ
Объясняя. Расслоений СПАСИБО ОТ BOTTOM OF MY HEART.Let мне сказать, чтобы понять это somthing и объяснить, в простоте, которая является более cumbersome.Once Спасибо еще раз. Cheers Дмитрий. |
|
||||
|
Просто теперь я написал в ответ, но не appers где,
Уважаемые Radlouv Расслоений Спасибо вам за разъяснение код очень прост перспективе. Нет, но просто Superb. Нет слов будет недостаточно. Зная, что-то но объяснить простым wrods требует больших Инсайт. Спасибо еще раз. Поднимает настроение. |
![]() |
| Закладки |
| Теги |
| Solaris |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|