我的unix服务器上有一个很大的文件,我需要从中提取某些部分
行的格式为
aNumber timestamp commandInformation我使用命令
grep LATENCY file.log | grep CMDTYPE=NEW过滤掉我想要的某些行。我只想要返回部分时间戳和该行的最后9个字符,而不是整个行。我该怎么做呢?
发布于 2009-09-24 13:05:58
使用awk(1)
awk ' { print $2" "substr($0,length($0)-8) }'发布于 2009-09-29 20:10:50
cut必须完成这项工作
grep something somewhere | grep againsomething | cut -f2 -d' '发布于 2009-09-25 16:44:00
这里我要说perl是比awk更好的选择:
perl -ne 'next if ! (/LATENCY|CMDTYPE=NEW/ && /^\d+.*\s+(.*)\s+.*(.{9})$/); print "$2 $3\n";'正则表达式更健壮,允许您省略与更严格的模式不匹配的行。上面的awk脚本将在substr调用中看到溢出(老实说,我不知道负索引在awk中做了什么),如果您向它提供中断输入,比如日志末尾的部分行。
https://stackoverflow.com/questions/1471514
复制相似问题