awk 脚本打印字符串的第一个实例
awk script to print first instance of string
我有 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 = ; = ; = t; print; } '
returns: 100 120.77294685990339
我需要第 3 列,其中包含 mongodb
或 mysql
。所以我需要一个 awk 或 sed 管道来搜索任一字符串并将其插入第 3 列。
所需的输出如下所示:100 120.77294685990339 mysql
我认为您应该在一次调用 awk 中完成所有事情。关键是更改字段分隔符:
awk -F'[,=]|://' '/^Command/{db=}/Operations/{o=}/Throughput/{t=}END{print o,t,db}' file
字段分隔符设置为 ,
、=
或 ://
。您感兴趣的文件部分将保存到变量中,并在文件处理完毕后打印出来。
而不是使用 END
块,您可以在匹配 /Operations/
时打印:
awk -F'[,=]|://' '/^Command/{db=}/Operations/{print ,t,db}/Throughput/{t=}' file
当然,这假定三行将按照您的两个示例中指定的顺序找到。
我有 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 = ; = ; = t; print; } '
returns: 100 120.77294685990339
我需要第 3 列,其中包含 mongodb
或 mysql
。所以我需要一个 awk 或 sed 管道来搜索任一字符串并将其插入第 3 列。
所需的输出如下所示:100 120.77294685990339 mysql
我认为您应该在一次调用 awk 中完成所有事情。关键是更改字段分隔符:
awk -F'[,=]|://' '/^Command/{db=}/Operations/{o=}/Throughput/{t=}END{print o,t,db}' file
字段分隔符设置为 ,
、=
或 ://
。您感兴趣的文件部分将保存到变量中,并在文件处理完毕后打印出来。
而不是使用 END
块,您可以在匹配 /Operations/
时打印:
awk -F'[,=]|://' '/^Command/{db=}/Operations/{print ,t,db}/Throughput/{t=}' file
当然,这假定三行将按照您的两个示例中指定的顺序找到。