我有一个日志文件,其中包含各种线程的执行开始时间和结束时间。我做了一半的工作,但我需要一些帮助来完成另一半。我写了这个命令 -
cat 2017-05-15.log | grep 'Executing ETL' | tr -s ' ' | cut -f2,3,4,5,8 -d' ' | sort -k5 -n
产生以下输出:
15 May 2017 03:43:40 696
15 May 2017 03:44:35 696
15 May 2017 03:45:02 696
15 May 2017 23:30:22 9502
15 May 2017 23:49:40 9502
15 May 2017 23:50:50 9502
15 May 2017 23:51:11 9502
15 May 2017 23:52:11 9502
15 May 2017 23:52:42 9502
15 May 2017 02:18:32 12795
15 May 2017 02:19:35 12795
15 May 2017 02:20:02 12795
15 May 2017 02:33:39 13674
15 May 2017 02:35:13 13674
15 May 2017 02:35:42 13674
15 May 2017 18:52:28 19143
15 May 2017 18:53:01 19143
15 May 2017 18:53:35 19143
15 May 2017 18:53:59 19143
15 May 2017 18:54:40 19143
此输出按进程ID排序,这是最后一列。每个进程Id的第一次出现是进程的开始时间,而最后一次出现是进程的结束时间。 我只需要显示每个进程的第一个(开始时间)和最后一个(结束时间)。像这样:
15 May 2017 03:43:40 696
15 May 2017 03:45:02 696
15 May 2017 23:30:22 9502
15 May 2017 23:52:42 9502
15 May 2017 02:18:32 12795
15 May 2017 02:20:02 12795
15 May 2017 02:33:39 13674
15 May 2017 02:35:42 13674
15 May 2017 18:52:28 19143
15 May 2017 18:54:40 19143
每个流程ID的条目数未修复。输出不必严格采用这种格式。但我需要能够清楚地看到每个过程的开始和结束时间。
答案 0 :(得分:2)
如果PID从不混淆,那么这很简单。
我们只是跟踪最后一行和它上面的PID,并在看到变化时打印最后一行和当前行。 (如果last
为空,则跳过打印,否则我们会得到一个空行,并记得打印END
的最后一行。)
$ awk '($5 != lastpid) { if (last) print last; print $0; }
{ lastpid = $5; last = $0 }
END {print last }' < times
15 May 2017 03:43:40 696
15 May 2017 03:45:02 696
15 May 2017 23:30:22 9502
15 May 2017 23:52:42 9502
15 May 2017 02:18:32 12795
15 May 2017 02:20:02 12795
15 May 2017 02:33:39 13674
15 May 2017 02:35:42 13674
15 May 2017 18:52:28 19143
15 May 2017 18:54:40 19143
答案 1 :(得分:0)
awk中的另一个人。哈希所有的第一次和持续,最后打印。如果只有一个条目,则只有一个条目将被输出:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.afcosta.inesctec.pt.android"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.android.volley:volley:1.0.0'
compile 'com.android.support:design:25.0.1'
testCompile 'junit:junit:4.12'
}