The UNIX and Linux Forums  

Go Back   В UNIX и Linux Форумы > Топ форумы > Shell программирование и сценарии
.
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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered By Powered by Google
 
LinkBack Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 11-16-2008
dawn_1030 dawn_1030 is offline
Зарегистрированный пользователь
  
 

Регистрация: Nov 2008
Сообщений: 2
Двойная петля, а проблема

Привет всем, я обнаружил странные проблемы с двойной, а петлей. Цель этих двух петель, а заключается в том, чтобы сравнить 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
Присоединенные изображения
File Type: bmp untitled.bmp (177,0 КБ, 13 просмотров)
Old 11-16-2008
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Регистрация: август 2001
Место проведения: Ashburn, Вирджиния
Сообщения: 9131
Внутренний контур суб-процесс. Все, что изменилось там никак не влияет на родительский процесс. Она в такой же ситуации, как

X \u003d 1
Баш-С ", X \u003d 2"
Эхо $ X

Обе ваши петли являются чтении из STDIN. Каждый процесс имеет только 1 STDIN поэтому две петли абсолютно необходимо отдельных процессов.
Old 11-16-2008
пресмыкающийся калечиться creepy cripple is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2008
Сообщений: 2
Существует никакой необходимости в течение 2 петли, вам придется использовать мощные Unix команды в сценарии, например, grep. Это должно работать:
Конечно, t.csv должно быть пустым перед выполнением сценария.

а читать LINE
делать
AUX \u003d $ (grep $ LINE test.csv)
если [[! -Z $ AUX]]
тогда
Эхо "$ AUX">> t.csv
еще
Эхо "НС">> t.csv
FI
Готово <tmplist.txt
Old 11-16-2008
elbrand elbrand is offline
Зарегистрированный пользователь
  
 

Регистрация: Apr 2008
Место проведения: Wolfenbuettel / Германия
Сообщений: 12
чтения во внутреннем цикле является подпроцесс. Все значения переменных установить или изменить внутри внутренней петли не известны за ее пределами. Если это небольшие файлы, попытайтесь поменять при-строить против для петель. Если нет, то магазин мета-данные во внутренней петли на файлы с их стороны. Но это может снизить скорость очень многое.
Но на самом деле я не вижу необходимости в двойной петлей. Почему бы не grep каждой строки из tmplist.txt на первый файл?
Old 11-16-2008
Franklin52 Franklin52 is offline Forum Staff  
Модератор
  
 

Регистрация: Февраль 2007
Сообщения: 4346
А решение с AWK:

Код:
awk '
NR==FNR{a[$1]=$2;next}
$0 in a{print $0,a[$0];next}
{print "NA"}
' test.csv tmplist.txt > t.csv

Old 11-17-2008
dawn_1030 dawn_1030 is offline
Зарегистрированный пользователь
  
 

Регистрация: Nov 2008
Сообщений: 2
Большое спасибо за ваши ответы! Мощная команда!
Мой скрипт работает сейчас. Спасибо всем!
Closed Thread

Закладки

Теги
Unix команды

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 12:22 PM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0