2013-12-13 35 views
3

我要动态地比较两个变量的值,答案写入文件:如何在bash中动态比较awk中的变量?

#!bin/bash 
Timestamp2="19:16:35" 

cat find_thread |awk -F'.' '{print $1}'|awk '{for (i=1; i<=NF;i++) {if ($i == $(Timestamp2) ) {print (i-1)}}}'>ThreadID 

其中find_thread文件具有以下内容:

8361 19:16:35.493540 
8361 19:16:35.493594 
8360 19:16:41.242314 
8360 19:16:41.242343 
8278 19:16:39.179931 
8278 19:16:39.179973 

回答

4

如果我理解正确的话,在这里你走:

awk -v ts="$Timestamp2" '$2 ~ "^" ts {print $1}' find_thread > ThreadID 

说明:

  • $Timestamp2写入变量ts使用-v标志。
  • 滤波由图案:$2 ~ "^" ts =所述第二列(例如19:16:35.493540)应与ts
  • 打印开始匹配线的第一列

以下是同样的事情另一变型:

awk -F'[ .]' -v ts="$Timestamp2" '$2 == ts {print $1}' find_thread > ThreadID 
+1

你不想'cat find_thread | awk ...> ThreadID',你总是希望'awk ... find_thread> ThreadID' –

+0

@PaulEvans部分地,我认为她可能会在'ps'的管道中使用它,部分我很懒惰......但是,对了,我现在修好了。 – janos

+0

谢谢你这个工作:) – fiddle