2015-04-05 2 views
0

У меня есть 2 .dat файлы:AWK сценария для печати первого экземпляра строки

YCSB Client 0.1 
Command line: -db com.yahoo.ycsb.db.MongoDbClient -s -P /home/james/YCSB/workloads/workloada -p mongodb.url=mongodb://192.168.0.8:27017 -p mongodb.database=ycsb -p recordcount=100 -load 
new database url = 192.168.0.8:27017/ycsb 
mongo connection created with 192.168.0.8:27017/ycsb 
[OVERALL], RunTime(ms), 828.0 
[OVERALL], Throughput(ops/sec), 120.77294685990339 
[INSERT], Operations, 100 
[INSERT], AverageLatency(us), 4279.99 
[INSERT], MinLatency(us), 588 
[INSERT], MaxLatency(us), 262990 

И

YCSB Client 0.1 
Command line: -db com.yahoo.ycsb.db.JdbcDBClient -s -P /home/james/YCSB/workloads/workloada -p db.url=jdbc:mysql://192.168.0.8:3306/ycsb -p db.user=root -p db.passwd=root -p recordcount=2001 -load 
Adding shard node URL: jdbc:mysql://192.168.0.8:3306/ycsb 
Using 1 shards 
[OVERALL], RunTime(ms), 3359.0 
[OVERALL], Throughput(ops/sec), 595.7130098243525 
[INSERT], Operations, 2001 
[INSERT], AverageLatency(us), 1259.888055972014 
[INSERT], MinLatency(us), 401 
[INSERT], MaxLatency(us), 34779 

Я пишу сценарий, который может быть использован на обеих из них и собирать значения зависимых на какой файл он используется на:

cat 100.dat | head | egrep -w 'Operations|Throughput' | cut -f3 -d' ' | sed 'N;s/\n/ /' | awk ' { t = $1; $1 = $2; $2 = t; print; } ' 

возвращается: 100 120.77294685990339

Мне нужна 3-я колонка, которая будет содержать либо mongodb, либо mysql. Поэтому мне нужна awk или sed pipe, которая будет искать любую строку и вставить ее в третий столбец.

требуемая мощность будет выглядеть следующим образом: 100 120.77294685990339 mysql

+0

Ваши требования не ясны - каков желаемый результат из этих файлов? –

+0

3-й столбец, содержащий «mongodb» или «mysql». Итак, 100 120.77294685990339 mysql. Например, – JamesF

ответ

2

Я думаю, что вы должны делать все это в одном вызове AWK. Главное, чтобы сделать это, чтобы изменить разделитель полей:

awk -F'[,=]|://' '/^Command/{db=$2}/Operations/{o=$3}/Throughput/{t=$3}END{print o,t,db}' file 

разделитель полей устанавливается либо ,, = или ://. Части интересующего вас файла сохраняются в переменных и печатаются после обработки файла.

Вместо того чтобы использовать END блок, вы можете распечатать при /Operations/ подобран:

awk -F'[,=]|://' '/^Command/{db=$2}/Operations/{print $3,t,db}/Throughput/{t=$3}' file 

Конечно, это предполагает, что три линии будут найдены в порядке, указанном в ваших двух примерах.

+1

Большое спасибо. awk -F '[, =] |: //' '/ Command/{db = $ 2}/Operations/{o = $ 3}/Пропускная способность/{t = $ 3} END {print db o t}' отлично работает. Я удалил запятые в конце, поскольку они создали дополнительные пробелы. – JamesF

+0

@JamesF да, запятые выводят разделитель полей вывода (пробел по умолчанию), вставленный между каждым полем. Вы можете настроить разделитель полей ввода так, чтобы он также содержал пространство, если бы вы хотели, но в этом случае, вероятно, проще просто удалить запятые. –

Смежные вопросы