文件名的格式如下:
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
答案 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]