Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
4
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
892
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4380
0
Помогите пожалуйста решить задачи
24th November, 23:53
6084
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4308
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2598
0
Awk парсинг xml?
Просмотров: 338
 
Ответов: 5
Привет!
Дано:
1. xml файл
<font color="black"><font color="#0000ff"><?</font><font color="#800000">xml</font> <font color="#ff0000">version</font>=<font color="#ff0000">1</font>.<font color="#ff0000">0</font>?<font color="#0000ff">></font><br/>
<font color="#0000ff"><</font><font color="#800000">file_events</font><font color="#0000ff">></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="f4d64c1a/497b733f81c2866d/81c2866da7e4d268.68"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="51d46ff1/fdb0cf112ec24d1e/2ec24d1e87c7a87a.7a"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="384bccff/ba9fc3f089695f6d/89695f6dea4210c1.c1"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="486c2459/24e0b8e2d1c311d8/d1c311d80290ed01.01"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="415eef3b/1c681c2b8a542c77/8a542c77cb1839ce.ce"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="b3008424/6da995605f28165c/5f28165c84475335.35"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="ff4d0e6d/ea7152595adb7c97/5adb7c97bf59427e.7e"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"></</font><font color="#800000">file_events</font><font color="#0000ff">></font></font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>
Причем в node event порядок аргументов может быть произвольным.
Задача:
1. Преобразовать данный файл к такому формату:
date|author|action|filename|comment
2. не обязательно Отсортировать данные по параметру date.
Вообще я делаю так:
<font color="black">cat $1 | \<br/>
grep -e <font color="#A31515">"event "</font> | \<br/>
sed -e <font color="#A31515">"s/^[ ]*//"</font> | \<br/>
awk <font color="#A31515">'<br/>
$2 ~ /data/ { p1=$2; } <br/>
$2 ~ /author/ { p2=$2; } <br/>
$2 ~ /action/ { p3=$2;} <br/>
$2 ~ /filename/ { p4=$2; } <br/>
$2 ~ /comment/ { p5=$2; } <br/>
<br/>
$3 ~ /data/ { p1=$3; } <br/>
$3 ~ /author/ { p2=$3; } <br/>
$3 ~ /action/ { p3=$3; } <br/>
$3 ~ /filename/ { p4=$3; } <br/>
$3 ~ /comment/ { p5=$3; } <br/>
<br/>
$4 ~ /data/ { p1=$4; } <br/>
$4 ~ /author/ { p2=$4; } <br/>
$4 ~ /action/ { p3=$4; } <br/>
$4 ~ /filename/ { p4=$4; } <br/>
$4 ~ /comment/ { p5=$4; } <br/>
<br/>
$5 ~ /data/ { p1=$5; } <br/>
$5 ~ /author/ { p2=$5; } <br/>
$5 ~ /action/ { p3=$5; } <br/>
$5 ~ /filename/ { p4=$5; } <br/>
$5 ~ /comment/ { p5=$5; } <br/>
<br/>
$6 ~ /data/ { p1=$6; } <br/>
$6 ~ /author/ { p2=$6; } <br/>
$6 ~ /action/ { p3=$6; } <br/>
$6 ~ /filename/ { p4=$6; } <br/>
$6 ~ /comment/ { p5=$6; }<br/>
<br/>
{ print p1"|"p2"|"p3"|"p4"|"p5"\n"; } '</font> | \<br/>
sort -t <font color="#A31515">"|"</font> -k1 > $result <br/>
</font><br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>
на выходе имею:
<font color="black"><font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="f4d64c1a/497b733f81c2866d/81c2866da7e4d268.68"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="51d46ff1/fdb0cf112ec24d1e/2ec24d1e87c7a87a.7a"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="384bccff/ba9fc3f089695f6d/89695f6dea4210c1.c1"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="486c2459/24e0b8e2d1c311d8/d1c311d80290ed01.01"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="415eef3b/1c681c2b8a542c77/8a542c77cb1839ce.ce"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="b3008424/6da995605f28165c/5f28165c84475335.35"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="ff4d0e6d/ea7152595adb7c97/5adb7c97bf59427e.7e"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="a0c052d4/b0a0b0c0f70a7d29/f70a7d29231dacbd.bd"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="eabd8551/ccb2616f5be66fdb/5be66fdb0d4c9a77.77"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="25046ffa/0dfcd577c31d07d8/c31d07d855ade3e5.e5"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="cb86925a/bf4f23acb14c6c47/b14c6c474628ff82.82"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="51d46ff1/fdb0cf112ec24d1e/2ec24d1e87c7a87a.7a"|comment=""/><br/>
<font color="gray">Source Code Highlighter</font></a>.</font>
<font color="black"><font color="#0000ff"><?</font><font color="#800000">xml</font> <font color="#ff0000">version</font>=<font color="#ff0000">1</font>.<font color="#ff0000">0</font>?<font color="#0000ff">></font><br/>
<font color="#0000ff"><</font><font color="#800000">file_events</font><font color="#0000ff">></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="f4d64c1a/497b733f81c2866d/81c2866da7e4d268.68"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="51d46ff1/fdb0cf112ec24d1e/2ec24d1e87c7a87a.7a"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="384bccff/ba9fc3f089695f6d/89695f6dea4210c1.c1"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="486c2459/24e0b8e2d1c311d8/d1c311d80290ed01.01"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="415eef3b/1c681c2b8a542c77/8a542c77cb1839ce.ce"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="b3008424/6da995605f28165c/5f28165c84475335.35"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"><</font><font color="#800000">event</font> <font color="#ff0000">date</font><font color="#0000ff">="1254728164000"</font> <font color="#ff0000">author</font><font color="#0000ff">="Bin/.svn/entries"</font> <font color="#ff0000">filename</font><font color="#0000ff">="ff4d0e6d/ea7152595adb7c97/5adb7c97bf59427e.7e"</font> <font color="#ff0000">action</font><font color="#0000ff">="D"</font> <font color="#ff0000">comment</font><font color="#0000ff">=""</font><font color="#0000ff">/></font><br/>
<font color="#0000ff"></</font><font color="#800000">file_events</font><font color="#0000ff">></font></font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font><font color="black">cat $1 | \<br/>
grep -e <font color="#A31515">"event "</font> | \<br/>
sed -e <font color="#A31515">"s/^[ ]*//"</font> | \<br/>
awk <font color="#A31515">'<br/>
$2 ~ /data/ { p1=$2; } <br/>
$2 ~ /author/ { p2=$2; } <br/>
$2 ~ /action/ { p3=$2;} <br/>
$2 ~ /filename/ { p4=$2; } <br/>
$2 ~ /comment/ { p5=$2; } <br/>
<br/>
$3 ~ /data/ { p1=$3; } <br/>
$3 ~ /author/ { p2=$3; } <br/>
$3 ~ /action/ { p3=$3; } <br/>
$3 ~ /filename/ { p4=$3; } <br/>
$3 ~ /comment/ { p5=$3; } <br/>
<br/>
$4 ~ /data/ { p1=$4; } <br/>
$4 ~ /author/ { p2=$4; } <br/>
$4 ~ /action/ { p3=$4; } <br/>
$4 ~ /filename/ { p4=$4; } <br/>
$4 ~ /comment/ { p5=$4; } <br/>
<br/>
$5 ~ /data/ { p1=$5; } <br/>
$5 ~ /author/ { p2=$5; } <br/>
$5 ~ /action/ { p3=$5; } <br/>
$5 ~ /filename/ { p4=$5; } <br/>
$5 ~ /comment/ { p5=$5; } <br/>
<br/>
$6 ~ /data/ { p1=$6; } <br/>
$6 ~ /author/ { p2=$6; } <br/>
$6 ~ /action/ { p3=$6; } <br/>
$6 ~ /filename/ { p4=$6; } <br/>
$6 ~ /comment/ { p5=$6; }<br/>
<br/>
{ print p1"|"p2"|"p3"|"p4"|"p5"\n"; } '</font> | \<br/>
sort -t <font color="#A31515">"|"</font> -k1 > $result <br/>
</font><br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font><font color="black"><font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="f4d64c1a/497b733f81c2866d/81c2866da7e4d268.68"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="51d46ff1/fdb0cf112ec24d1e/2ec24d1e87c7a87a.7a"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="384bccff/ba9fc3f089695f6d/89695f6dea4210c1.c1"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="486c2459/24e0b8e2d1c311d8/d1c311d80290ed01.01"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="415eef3b/1c681c2b8a542c77/8a542c77cb1839ce.ce"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="b3008424/6da995605f28165c/5f28165c84475335.35"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="ff4d0e6d/ea7152595adb7c97/5adb7c97bf59427e.7e"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="a0c052d4/b0a0b0c0f70a7d29/f70a7d29231dacbd.bd"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="eabd8551/ccb2616f5be66fdb/5be66fdb0d4c9a77.77"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="25046ffa/0dfcd577c31d07d8/c31d07d855ade3e5.e5"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="cb86925a/bf4f23acb14c6c47/b14c6c474628ff82.82"|comment=""/><br/>
<font color="#0000ff">date</font>="1254728164000"|author="Bin/.svn/entries"|<font color="#0000ff">action</font>="D"|filename="51d46ff1/fdb0cf112ec24d1e/2ec24d1e87c7a87a.7a"|comment=""/><br/>
<font color="gray">Source Code Highlighter</font></a>.</font>
Если требуемые данные даны в виде: date=«1254728164000» author=«Bin/.svn/entries» filename=«486c2459/24e0b8e2d1c311d8/d1c311d80290ed01.01» action=«D» то их можно интерпретировать (провести присваивания значений переменным в bash)
grep -e "event " data.xml |\
sed -e "s/^[ ]*//" |\
sed -e "s/^<event //g" |\
sed -e "s|/>$||" |\
while read ln
do eval $ln ;
echo "$date|$author|$action|$filename|$comment"
done | sort -t "|" -k1
sed -e "s/^[ ]*//" |\
sed -e "s/^<event //g" |\
sed -e "s|/>$||" |\
while read ln
do eval $ln ;
echo "$date|$author|$action|$filename|$comment"
done | sort -t "|" -k1
набросал на скорую руку:
xml2 < 1 | sed 's=/file_events/event[/]*[@]*==;' | awk '/^$/{s++}{printf "%05d %s\n",s,$0}' | sort -k1 -k2rn | sed 's/^[^ ]* //;s/[^=]*=//;s/^$/\&\&\&/' | tr '\n' '|' | sed 's/|&&&|/\n/g'
xml2 из пакета xml2. превращает xml d такой вид:
/file_events/event
/file_events/event/@date=1254728164000
/file_events/event/@author=Bin/.svn/entries
/file_events/event/@filename=ff4d0e6d/ea7152595adb7c97/5adb7c97bf59427e.7e
/file_events/event/@action=D
/file_events/event/@comment
/file_events/event/@date=1254728164000
/file_events/event/@author=Bin/.svn/entries
/file_events/event/@filename=ff4d0e6d/ea7152595adb7c97/5adb7c97bf59427e.7e
/file_events/event/@action=D
/file_events/event/@comment
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться