2

假设我的输入文件是表格分隔的,如何获取类名和可执行时间?

 - class Apple.java executed by user ABC34 executable time 980.9 ms
 - class ABC.java executed by user ABC34  executable time is in sec 45.9 ss
 - class TAS.java executed by user ABC34  executable time 75.9 ms
 - class GW.java executed by user ABC34  executable time is in sec 0.9 ss
 - class MYClass.java executed by user ABC34  executable time  is in sec 7.9 ss
 - class Times.java executed by user ABC34  executable time  is in sec 9.9 ss
 - class Sunday.java executed by user ABC34  executable time  is in sec 85.9 ss
 - class Week.java executed by user ABC34  executable time  is in sec 1000.9 ss

我想要这样的输出

 - Apple.java 980.9 ms
 - ABC.java  45.9 ss
 - TAS.java  75.9 ms
 - GW.java  0.9 ss
 - MYClass.java 7.9 ss
 - Times.java  9.9 ss
 - Sunday.java 85.9 ss
 - Week.java  1000.9 ss

请看我的代码。我出不去

#!/bin/bash

LOGFILE=$1
SEARCH=$2

echo $SEARCH

if [ -f $LOGFILE ];
then

awk '/ABC34 / && /is in sec/ {print $2, $13, $14;}' $LOGFILE>Output.txt
awk '/ABC34 / {print $2, $8, $9;}' $LOGFILE>Output.csv

else
echo "No File Found"
fi

但是当我检查我的 Output.txt 是空的。非常感谢。

4

2 回答 2

2

使用awk它的单线:

awk '{print $1,$3,$(NF-1),$NF}' your.file

NF包含一行中的字段数。因此该命令打印 1.、3. 倒数第二个和最后一个字段。

输出:

- Apple.java 980.9 ms
- ABC.java 45.9 ss
- TAS.java 75.9 ms
- GW.java 0.9 ss
- MYClass.java 7.9 ss
- Times.java 9.9 ss
- Sunday.java 85.9 ss
- Week.java 1000.9 ss
于 2013-07-25T11:45:02.527 回答
1

GNU 的代码:

sed -r 's/.*class\s(\S+)\s.*(\s[0-9.]+\s[ms][ms])$/- \1\2/' file

$猫文件
- 用户 ABC34 执行时间 980.9 毫秒的 Apple.java 类
- 由用户 ABC34 执行的类 ABC.java 可执行时间为 45.9 秒
- 用户执行的类 TAS.java ABC34 可执行时间 75.9 毫秒
- 用户 ABC34 执行的类 GW.java 可执行时间为 0.9 秒
- 由用户 ABC34 执行的类 MYClass.java 可执行时间为 7.9 秒
- 用户 ABC34 执行的类 Times.java 可执行时间在 sec 9.9 ss
- 用户 ABC34 执行的类 Sunday.java 可执行时间为 85.9 秒
- 用户 ABC34 执行的类 Week.java 可执行时间为 1000.9 秒

$ sed -r 's/.*class\s(\S+)\s.*(\s[0-9.]+\s[ms][ms])$/- \1\2/' 文件
- Apple.java 980.9 毫秒
- ABC.java 45.9 ss
- TAS.java 75.9 毫秒
- GW.java 0.9 ss
- MYClass.java 7.9 ss
- Times.java 9.9 ss
- Sunday.java 85.9 ss
- Week.java 1000.9 ss
于 2013-07-25T21:05:55.750 回答