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

用于打印字符串的第一个实例的awk脚本,awk,sed,pipe,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:27

我有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

我正在编写一个脚本,可以在这两个脚本上使用,并根据使用该脚本的文件收集值:

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

我需要一个包含
mongodb
mysql
的第三列。因此,我需要一个awk或sed管道来搜索任一字符串并将其插入第三列


所需的输出如下:
100120.77294685990339 mysql

我认为您应该在一次调用awk中完成全部工作。要做的关键是更改字段分隔符:

awk -F'[,=]|://' '/^Command/{db=$2}/Operations/{o=$3}/Throughput/{t=$3}END{print o,t,db}' file
字段分隔符设置为
=
://
。您感兴趣的文件部分将保存到变量中,并在处理文件后打印

/Operations/
匹配时,您可以打印,而不是使用
结束
块:

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

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

您的要求不清楚-这些文件的期望输出是什么?第三列包含“mongodb”或“mysql”。所以100 120.77294685990339 mysql。例如:非常感谢。awk-F'[,=]|::/''/Command/{db=$2}/Operations/{o=$3}/Throughput/{t=$3}END{print db o t}效果很好。我删除了末尾的逗号,因为它们创建了额外的空格。@JamesF是的,逗号会导致在每个字段之间插入输出字段分隔符(默认为空格)。您可以调整输入字段分隔符,以便它也包含一个空格(如果需要),但在这种情况下,删除逗号可能更简单。
awk -F'[,=]|://' '/^Command/{db=$2}/Operations/{print $3,t,db}/Throughput/{t=$3}' file