【问题标题】:How to compare variable dynamically inside awk in bash?如何在bash中的awk内动态比较变量?
【发布时间】:2013-12-31 22:43:02
【问题描述】:

我想动态比较两个变量的值并将答案写入文件:

#!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

【问题讨论】:

    标签: bash awk sh


    【解决方案1】:

    如果我理解正确的话,请看:

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

    解释:

    • 使用-v 标志将$Timestamp2 放入变量ts
    • 按模式过滤:$2 ~ "^" ts = 第二列(例如19:16:35.493540)应以ts 开头
    • 打印匹配行的第一列

    这是同一事物的另一个变体:

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

    【讨论】:

    • 你不想要cat find_thread | awk ... &gt; ThreadID,你总是想要awk ... find_thread &gt; ThreadID
    • @PaulEvans 部分原因是我认为她可能会在ps 的管道中使用它,部分原因是我很懒……但你说得对,我现在修好了。
    • 措辞优美的问题和一个非常好的解释答案。 +1 给你们两个 :)
    • 不客气。你没有看到很多完美的答案:-)。
    猜你喜欢
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2017-02-18
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多