假设我的输入文件是表分隔的,我如何使用AWK获得类名和可执行时间



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

 - 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时,它是空的。非常感谢。

使用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

GNU sed代码:

sed -r 's/.*classs(S+)s.*(s[0-9.]+s[ms][ms])$/- 12/' file

$cat文件-由用户ABC34执行的类Apple.java可执行时间980.9毫秒-用户ABC34执行的ABC.java类可执行时间为秒45.9秒-用户ABC34执行的类TAS.java可执行时间75.9毫秒-用户ABC34执行的GW.java类可执行时间为0.9秒-用户ABC34执行的类MYClass.java可执行时间为秒7.9秒-用户ABC34执行的类Times.java可执行时间为秒9.9秒-用户ABC34执行的类Sunday.java可执行时间为秒85.9秒-用户ABC34执行的类Week.java可执行时间为秒1000.9秒$sed-r的/.*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-时间.java 9.9秒-星期日.java 85.9 ss-Week.java 1000.9 ss

最新更新