【问题标题】:awk/sed/grep modify lines with certain patternawk/sed/grep 修改具有特定模式的行
【发布时间】:2015-10-25 14:26:41
【问题描述】:

我需要以某种方式修改下面的文件:

1445777609670355400 mongo client connection created with mongodb
1445777612279125121 [A], Time(ms), 3344.0
1445777612288777627 [B], Throughput(ops/sec), 299.0430622009569
1445777612289907122 [C], Operations, 505.0
1445777612290864948 [D], AverageLatency(us), 1712.0039603960397
1445777612294065941 [E], MinLatency(us), 253.0
1445777612325747187 [F], Return=0, 505

我遵循了thread 中给出的解决方案。到目前为止,我得到了一些结果:

mongodb operations="A" 1445777612279125121
mongodb operations="B" 1445777612288777627
mongodb operations="C" 1445777612289907122
mongodb operations="D" 1445777612290864948
mongodb operations="E" 1445777612294065941
mongodb operations="F" 1445777612295131996

我想实现这个输出:

mongodb operations="A",RunTime(ms)=3344.0 1445777612279125121
mongodb operations="B",Throughput(ops/sec)=299.0430622009569 1445777612288777627
mongodb operations="C",Operations=505.0 1445777612289907122
mongodb operations="D",AverageLatency(us)=1712.0039603960397 1445777612290864948
mongodb operations="E",MinLatency(us)=253.0 1445777612294065941
mongodb operations="F",Return=505 1445777612325747187

谢谢。

【问题讨论】:

    标签: awk sed grep


    【解决方案1】:

    可能不是最漂亮的解决方案,但这应该可以解决问题

    awk -F"[][, ]+" '{str=$3; sub(/Time/,"RunTime", str); \
                      sub(/=0/, "", str); \
                      if(NR>1){print "mongodb operations=\""$2"\","str"="$4,$1}}' input
    

    在此解决方案中,前两个单词 mongodb operations 是硬编码的。由于您想要的输出,必须包含两个字符串替换(Time -> RunTime 和 Return=0 -> Return)

    【讨论】:

    • 您不需要任何尾随分号,也不需要前 2 行末尾的反斜杠,如果您更早将测试移到 NR 上,则可以避免在上执行不必要的 sub()第一行。此外,如果您丢失了 if 并将测试移动到条件部分而不是在操作部分中,它会更加地道。
    【解决方案2】:
    $ cat tst.awk
    BEGIN { FS="[][[:space:],]+" }
    NR>1 {
        sub(/^Time/,"Run&",$3)
        sub(/=[0-9]+$/,"",$3)
        printf "mongodb operations=\"%s\",%s=%s %s\n",$2,$3,$4,$1
    }
    
    $ awk -f tst.awk file
    mongodb operations="A",RunTime(ms)=3344.0 1445777612279125121
    mongodb operations="B",Throughput(ops/sec)=299.0430622009569 1445777612288777627
    mongodb operations="C",Operations=505.0 1445777612289907122
    mongodb operations="D",AverageLatency(us)=1712.0039603960397 1445777612290864948
    mongodb operations="E",MinLatency(us)=253.0 1445777612294065941
    mongodb operations="F",Return=505 1445777612325747187
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-02
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 2014-11-30
      相关资源
      最近更新 更多