![]() |
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| петля проблемы | выгон | Shell программирование и сценарии | 2 | 09-23-2008 11:15 AM |
| Проблема в петле | mdap | Shell программирование и сценарии | 3 | 08-16-2008 02:27 PM |
| Проблема в Для Loop | Наблюдатель | Shell программирование и сценарии | 2 | 05-28-2008 03:43 AM |
| Проблема в то время как петли и SQL | nandajk | UNIX для чайников Вопросы И Ответы | 20 | 05-04-2007 07:19 AM |
| Проблема в то время как петля | mridula | Программирования высокого уровня | 1 | 12-11-2005 11:44 AM |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
Двойная петля, а проблема
Привет всем, я обнаружил странные проблемы с двойной, а петлей. Цель этих двух петель, а заключается в том, чтобы сравнить 2 файла, tmplist.txt является ссылкой на файл с полным списком серверов. Пожалуйста, см. прилагаемую фотографию на логику и отношения между входом и выходом.
В то время как 2 петли должны поиск серверов в / test.csv в / tmplist.txt, линия за линией. Например, поиск первого пункта в / test.csv SERVER2 в / tmplist.txt, начиная с первой строки в / tmplist.txt (LINENUM \u003d 1), если не найден затем выдаст 'НС ", а затем перейти на следующую строку в / tmplist.txt до тех пор, пока он считает, что соответствующие SERVER2, и обновление LINENUM в то же время. Иначе будет перейти к поиску следующего сервера server3 в / из tmplist.txt текущей строки последующий период (поскольку все серверы всегда перечислены в порядке alphabatic). Переменная LINENUM (индикатор номера), используемых в то время как внутренняя петля. Она является предопределенным в 1, после того, если условие если [$ SERVER \u003d $ рефери] Правда, LINENUM будет прирост, а затем разорвать внутренние петли, хотя и по-прежнему в космическом, а петлей. Однако, в то время как внешняя петля, каждый раз, когда он читает, и петли СЕРВЕРА COUNT, то LINENUM начинается с первоначальной стоимостью 1 раз, а с приращением LINENUM из внутренней, а петлей. Ниже показано частью программы с подробной информацией, а на 2 петли. Может кто поможет объяснить мне, что здесь не так? Это мой первый UNIX уступки, будет действительно ценим Вашу помощь!! #! / BIN / Bash TYPE \u003d P2PS LINENUM \u003d 1 а читать СЕРВЕРА COUNT; делать Кошка tmplist.txt | а читать линии; делать Рефери \u003d $ (руководитель - $ LINENUM tmplist.txt | гузки -1) если [$ SERVER \u003d $ рефери], затем Пусть LINENUM + + Эхо-Н "," $ COUNT>> t.csv перерыв еще Пусть LINENUM + + Эхо-Н "НС">> t.csv продолжить FI готово Готово <test.csv |
|
||||
|
Существует никакой необходимости в течение 2 петли, вам придется использовать мощные Unix команды в сценарии, например, grep. Это должно работать:
Конечно, t.csv должно быть пустым перед выполнением сценария. а читать LINE делать AUX \u003d $ (grep $ LINE test.csv) если [[! -Z $ AUX]] тогда Эхо "$ AUX">> t.csv еще Эхо "НС">> t.csv FI Готово <tmplist.txt |
|
||||
|
чтения во внутреннем цикле является подпроцесс. Все значения переменных установить или изменить внутри внутренней петли не известны за ее пределами. Если это небольшие файлы, попытайтесь поменять при-строить против для петель. Если нет, то магазин мета-данные во внутренней петли на файлы с их стороны. Но это может снизить скорость очень многое.
Но на самом деле я не вижу необходимости в двойной петлей. Почему бы не grep каждой строки из tmplist.txt на первый файл? |
|
||||
|
А решение с AWK: Код:
awk '
NR==FNR{a[$1]=$2;next}
$0 in a{print $0,a[$0];next}
{print "NA"}
' test.csv tmplist.txt > t.csv
|
|
||||
|
Большое спасибо за ваши ответы! Мощная команда!
Мой скрипт работает сейчас. Спасибо всем! |
![]() |
| Закладки |
| Теги |
| Unix команды |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|