awk脚本打印字符串的第一个实例

时间:2015-04-05 00:48:59

标签: awk sed pipe

我有2个.dat文件:

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列,其中包含mongodbmysql。所以我需要一个awk或sed管道,它将搜索任一字符串并将其插入第3列。

所需的输出如下所示:100 120.77294685990339 mysql

1 个答案:

答案 0 :(得分: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

当然,这假设将按照两个示例中指定的顺序找到三行。