sed синтаксический анализ xml file1 index file2 - PullRequest
0 голосов
/ 17 декабря 2011

Мне нужен один лайнер, который будет соответствовать линии в file1 /data/weather/weatherIconUrl=http:/someurl на основе кода погоды (/data/weather/weatherCode=116) получить правильный url из file2

FILE1

/data/weather/date=2011-12-18
/data/weather/tempMaxC=25
/data/weather/tempMaxF=76
/data/weather/tempMinC=14
/data/weather/tempMinF=56
/data/weather/windspeedMiles=15
/data/weather/windspeedKmph=24
/data/weather/winddirection=NE
/data/weather/winddir16Point=NE
/data/weather/winddirDegree=39
/data/weather/weatherCode=112
/data/weather/weatherIconUrl=http:/someurl
/data/weather/weatherDesc= Cloudy 
/data/weather/precipMM=0.0
/data/weather
/data/weather/date=2011-12-19
/data/weather/tempMaxC=29
/data/weather/tempMaxF=84
/data/weather/tempMinC=17
/data/weather/tempMinF=63
/data/weather/windspeedMiles=13
/data/weather/windspeedKmph=21
/data/weather/winddirection=N
/data/weather/winddir16Point=N
/data/weather/winddirDegree=360
/data/weather/weatherCode=116
/data/weather/weatherIconUrl=http://someurl
/data/weather/weatherDesc=Partly Cloudy 
/data/weather/precipMM=14.1

ФАЙЛ 2

/data/weather/weatherCode=111
/data/weather/weatherIconUrl=images/icon1.png
/data/weather/weatherCode=112
/data/weather/weatherIconUrl=images/icon2.png
/data/weather/weatherCode=113
/data/weather/weatherIconUrl=images/icon3.png

----------
/data/weather/weatherCode=120
/data/weather/weatherIconUrl=images/icon20.png

Желаемый результат (Файл1 должен редактироваться)

FILE1 (отредактированный)

    /data/weather/date=2011-12-18
    /data/weather/tempMaxC=25
    /data/weather/tempMaxF=76
    /data/weather/tempMinC=14
    /data/weather/tempMinF=56
    /data/weather/windspeedMiles=15
    /data/weather/windspeedKmph=24
    /data/weather/winddirection=NE
    /data/weather/winddir16Point=NE
    /data/weather/winddirDegree=39
    /data/weather/weatherCode=112
    /data/weather/weatherIconUrl=images/icon12.png
    /data/weather/weatherDesc= Cloudy 
    /data/weather/precipMM=0.0
    /data/weather
    /data/weather/date=2011-12-19
    /data/weather/tempMaxC=29
    /data/weather/tempMaxF=84
    /data/weather/tempMinC=17
    /data/weather/tempMinF=63
    /data/weather/windspeedMiles=13
    /data/weather/windspeedKmph=21
    /data/weather/winddirection=N
    /data/weather/winddir16Point=N
    /data/weather/winddirDegree=360
    /data/weather/weatherCode=116
    /data/weather/weatherIconUrl=images/icon16.png
    /data/weather/weatherDesc=Partly Cloudy 
    /data/weather/precipMM=14.1

Ответы [ 2 ]

0 голосов
/ 18 декабря 2011

Это может работать для вас:

sed 'N;s|\(.*\)\n\([^=]*\)\(.*\)|\\!\1!,\\!\2!s!http.*!\3!|' file2 | sed -i -f - file1

Пояснение:

Генерация команд sed из файла2 для редактирования файла1.

N.B. Я предполагаю, что в file2 - означают тот же шаблон, что и выше, до последнего шаблона для кода 120 (без пустых строк).

0 голосов
/ 17 декабря 2011

У вас должна работать строка awk:

awk 'FNR==NR{if(NR%2)i=$0;else a[i]=$0;next;}{if($0 in a){print; print a[$0]}else print}' file2 file1

EDIT

здесь я не вижу дополнительных линий. смотри тест. (возможно, ваш пример данных формата не совпадает с вашими реальными данными.).

однако я показал путь, как это сделать. Вы можете изменить awk oneliner, чтобы он соответствовал вашему реальному формату данных.

kent$  cat f1
/data/weather/date=2011-12-18
/data/weather/tempMaxC=25
/data/weather/tempMaxF=76
/data/weather/tempMinC=14
/data/weather/tempMinF=56
/data/weather/windspeedMiles=15
/data/weather/windspeedKmph=24
/data/weather/winddirection=NE
/data/weather/winddir16Point=NE
/data/weather/winddirDegree=39
/data/weather/weatherCode=112
/data/weather/weatherIconUrl=http:/someurl
/data/weather/weatherDesc= Cloudy 
/data/weather/precipMM=0.0
/data/weather
/data/weather/date=2011-12-19
/data/weather/tempMaxC=29
/data/weather/tempMaxF=84
/data/weather/tempMinC=17
/data/weather/tempMinF=63
/data/weather/windspeedMiles=13
/data/weather/windspeedKmph=21
/data/weather/winddirection=N
/data/weather/winddir16Point=N
/data/weather/winddirDegree=360
/data/weather/weatherCode=116
/data/weather/weatherIconUrl=http://someurl
/data/weather/weatherDesc=Partly Cloudy 
/data/weather/precipMM=14.1

kent$  cat f2
/data/weather/weatherCode=111
/data/weather/weatherIconUrl=images/icon1.png
/data/weather/weatherCode=112
/data/weather/weatherIconUrl=images/icon2.png
/data/weather/weatherCode=113
/data/weather/weatherIconUrl=images/icon3.png
/data/weather/weatherCode=116
/data/weather/weatherIconUrl=images/icon16.png


kent$  awk 'FNR==NR{if(NR%2)i=$0;else a[i]=$0;next;}{if($0 in a){print; print a[$0]}else print}' f2 f1
/data/weather/date=2011-12-18
/data/weather/tempMaxC=25
/data/weather/tempMaxF=76
/data/weather/tempMinC=14
/data/weather/tempMinF=56
/data/weather/windspeedMiles=15
/data/weather/windspeedKmph=24
/data/weather/winddirection=NE
/data/weather/winddir16Point=NE
/data/weather/winddirDegree=39
/data/weather/weatherCode=112
/data/weather/weatherIconUrl=images/icon2.png
/data/weather/weatherIconUrl=http:/someurl
/data/weather/weatherDesc= Cloudy 
/data/weather/precipMM=0.0
/data/weather
/data/weather/date=2011-12-19
/data/weather/tempMaxC=29
/data/weather/tempMaxF=84
/data/weather/tempMinC=17
/data/weather/tempMinF=63
/data/weather/windspeedMiles=13
/data/weather/windspeedKmph=21
/data/weather/winddirection=N
/data/weather/winddir16Point=N
/data/weather/winddirDegree=360
/data/weather/weatherCode=116
/data/weather/weatherIconUrl=images/icon16.png
/data/weather/weatherIconUrl=http://someurl
/data/weather/weatherDesc=Partly Cloudy 
/data/weather/precipMM=14.1

EDIT2

без .... Sameurl ...

 awk 'FNR==NR{if(NR%2)i=$0;else a[i]=$0;next;}{if($0 in a){print; print a[$0]}else if ($0!~/someurl/) print}' f2 f1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...