Go Back   В UNIX и Linux Форумы > Топ форумы > Shell программирование и сценарии
.
Google Site



Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь.

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered By Powered by Google
 
Резьба Инструменты Искать в этом Thread Оценка: Thread Rating: 2 votes, 5.00 average. Режимы дисплея
Old 03-25-2007
Зарегистрированный пользователь
 

Регистрация: Mar 2007
Сообщений: 60
модификации файла с ключом

Привет,
Я пытаюсь обновить MASTER файл новый файл, который может содержать меньшее количество записей.
Обновление необходимо использовать ключ (первые 2 поля), вот senario:
Мастер:
а, б; 0
A; C; 0
A; D; 0

NEW:
A; C 1;

результат должен быть:
а, б; 0
A; C 1;
A; D; 0

Вы можете порекомендовать мне способ это сделать?

10x
Ю.Н.

Последний раз редактировалось ynixon; на 03-25-2007 08:01 PM..
Рекламные ссылки
Old 03-25-2007
Зарегистрированный пользователь
 

Регистрация: Sep 2006
Сообщения: 2604
Если у вас есть Python, вот альтернатива:

Код:
#!/usr/bin/python
new = open("new").readlines()
fi = open("file").readlines()
for li in fi:
    li = li.strip().split(";")
    for li2 in new:
        li2 = li2.strip().split(";")
        if li2[0] == li[0] and li2[1] == li[1]:
            print ';'.join(li2)
        else:
            print ';'.join(li)

Old 03-26-2007
dennis.jacob's Avatar
DJ - студент
 

Регистрация: Февраль 2007
Место: Сингапур / Кочин
Сообщений: 761
PLZ дать попробовать на этом ...


Код:
awk -F";" 'BEGIN {OFS=";"; i=1; while((getline line < "NEW")>0) arr[i++]=line; }  { for(j=1;j<i;j++) { split(arr[j],temp,";"); if (($1==temp[1])&&($2==temp[2])) {$3=temp[3];} }print; }' MASTER

Old 03-26-2007
Зарегистрированный пользователь
 

Регистрация: Mar 2007
Сообщений: 60
спасибо она работает:)

эта работает быстро
спасибо
Old 03-27-2007
Зарегистрированный пользователь
 

Регистрация: Mar 2007
Сообщений: 60
Post небольшая коррекция необходима

Цитата:
Первоначально Послано jacoden
PLZ дать попробовать на этом ...


Код:
awk -F";" 'BEGIN {OFS=";"; i=1; while((getline line < "NEW")>0) arr[i++]=line; }  { for(j=1;j<i;j++) { split(arr[j],temp,";"); if (($1==temp[1])&&($2==temp[2])) {$3=temp[3];} }print; }' MASTER

Я забыл упомянуть о том, что я также необходимо добавить в результате новых записей из Нью которые не существуют в MASTER.
Например:

Мастер:
а, б; 0
A; C; 0
A; D; 0

NEW:
A; C 1;
A; E 2;

результат должен быть:
а, б; 0
A; C 1;
A; D; 0
A; E 2;
Old 03-27-2007
anbu23 anbu23 is offline Forum Advisor  
Зарегистрированный пользователь
 

Регистрация: Mar 2006
Место проведения: Бангалор, Индия
Сообщений: 1565
Цитата:
Первоначально Послано ynixon
Я забыл упомянуть о том, что я также необходимо добавить в результате новых записей из Нью которые не существуют в MASTER.
Например:

Мастер:
а, б; 0
A; C; 0
A; D; 0

NEW:
A; C 1;
A; E 2;

результат должен быть:
а, б; 0
A; C 1;
A; D; 0
A; E 2;

Код:
awk -F";" ' BEGIN {OFS=";"; while( getline < "NEW" ) arr[$1";"$2]=$3; }
{  if( arr[$1";"$2] !~ /^ *$/ ) { $3=arr[$1";"$2]; print; delete arr[$1";"$2] } 
   else print 
}
END { 
for ( key in arr ) {
if( arr[key] !~ /^ *$/ ) { print key";"arr[key] } 
} } ' MASTER

Old 03-27-2007
Зарегистрированный пользователь
 

Регистрация: Mar 2007
Сообщений: 60
Thumbs up Спасибо: D

Это даже быстрее, рабочий
Рекламные ссылки
Closed Thread

Закладки

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

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

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

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


Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
Файл обновления piyush_movadiya Shell программирование и сценарии 8 06-27-2007 08:39 AM
Как обновить одну строку в файл с SED brendanf Shell программирование и сценарии 6 08-30-2006 08:44 PM
Файл обновления даты amne UNIX для чайников Вопросы И Ответы 2 05-31-2005 09:09 AM
обновить исполняемый файл anent Программирования высокого уровня 3 10-19-2001 04:40 PM
Пакетного файла обновления cfoxwell UNIX для чайников Вопросы И Ответы 4 10-04-2001 05:50 AM



Часовой пояс GMT -4. Текущее время 04:03 AM.


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

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