【问题标题】:String comparison in awkawk中的字符串比较
【发布时间】:2011-09-02 14:27:09
【问题描述】:

我需要按字母顺序比较两个字符串,而不仅仅是相等测试。我想知道有没有办法在 awk 中进行字符串比较?

【问题讨论】:

  • 当然可以 - 它主要是一种字符串处理语言。
  • 这是一种误解。例如,表达式$1 == $2 将错误地报告字符串0011.0 相等。

标签: string awk syntax


【解决方案1】:

当然可以:

pax$ echo 'hello
goodbye' | gawk '{if ($0 == "hello") {print "HELLO"}}'
HELLO

您也可以进行不等式(有序)测试:

pax> printf 'aaa\naab\naac\naad\n' | gawk '{if ($1 < "aac"){print}}'
aaa
aab

【讨论】:

  • 运算符
  • @Sumod,那么您对awk 的实现就被破坏了。在任何情况下,!= 都无法根据问题对字符串进行排序。请参阅第一个字符之外的字符串比较更新,我建议切换到使用 GNU 变体。
  • 好的。我正在使用 CentOS 6.4 附带的 awk。它说 GNU awk 3.1.7。请查看我的命令的输入。
    $jps - 29420 Jps、28009 RunJar、27501 DseDaemon。如果我给出命令 - jps | awk '{if ($2
  • @Sumod,如果你的三行是29420 Jps28009 RunJar27501 DseDemon,那么它的作用是正确的。 DseDemon 字符串是唯一Jps 小一的字符串。 RunJar 更大,Jps equal 因此两者都不会打印。尝试包含11111 Jpr 的另一行,看看会发生什么,我想你会发现它打印得很好。如果要在输出中包含 Jps 行,则应使用 &lt;= 而不是 &lt;
【解决方案2】:

您可以在 awk 中使用标准布尔运算符进行字符串比较,这与在 C 中必须使用 strcmp() 不同。

echo "xxx yyy" &gt; test.txt

cat test.txt | awk '$1!=$2 { print($1 $2); }'

【讨论】:

  • 这里不要使用 cat,awk 完全可以自己读取文件。 Cat Award 的无用使用浮现在脑海中......partmaps.org/era/unix/award.html
  • 嗯,你是对的。可能如下:awk '...' test.txt。感谢您的链接。
  • “无用使用猫奖”非常适合您的工具箱 :-)
【解决方案3】:

您可以在nawk manual查看答案

echo aaa bbb | awk '{ print ($1 >= $2) ? "true" : "false" }'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多