如何使用awk和regex或substring

时间:2015-08-16 16:51:46

标签: regex bash awk

文件名的格式如下:

YYYY-MM-DD_hostname_something.log

我想从文件名中获取主机名。主机名可以是任意长度,但始终具有_之前和之后。这是我目前的awk声明。它工作正常,直到主机名长度发生变化。现在我不能再使用它了。

awk 'BEGIN { OFS = "," } FNR == 1 { d = substr(FILENAME, 1, 10) } { h = substr(FILENAME, 12, 10) } $2 ~ /^[AP]M$/ && $3 != "CPU" { print d, $1 "" $2, h, $4+$5, $6, $7+$8+$9}' *_something.log > myfile.log

3 个答案:

答案 0 :(得分:2)

echo 'YYYY-MM-DD_hostname_something.log' | awk -F"_" '{print $2}'

输出:

hostname

我认为您的主机名不包含_

答案 1 :(得分:1)

$ ls YYYY-MM-DD_hostname_something.log | cut -d _ -f 2
hostname

cut(1)实用程序是POSIX并接受-d _选项以指定分隔符,-f 2指定第二个字段。它有一些更好的选项,您可以在其fine manual page中阅读。

答案 2 :(得分:0)

由于您已经提到需要修改awk代码,请将splittr函数替换为split。

split(FILENAME,a,"_");date = a[1];host = a[2] 
  • 将FILENAME值拆分为数组a,其中_为FS。
  • a [1]将包含日期
  • a [2]将包含主机名值。