【发布时间】:2011-09-02 14:27:09
【问题描述】:
我需要按字母顺序比较两个字符串,而不仅仅是相等测试。我想知道有没有办法在 awk 中进行字符串比较?
【问题讨论】:
-
当然可以 - 它主要是一种字符串处理语言。
-
这是一种误解。例如,表达式
$1 == $2将错误地报告字符串001和1.0相等。
我需要按字母顺序比较两个字符串,而不仅仅是相等测试。我想知道有没有办法在 awk 中进行字符串比较?
【问题讨论】:
$1 == $2 将错误地报告字符串001 和1.0 相等。
当然可以:
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
【讨论】:
awk 的实现就被破坏了。在任何情况下,!= 都无法根据问题对字符串进行排序。请参阅第一个字符之外的字符串比较更新,我建议切换到使用 GNU 变体。
29420 Jps、28009 RunJar 和27501 DseDemon,那么它的作用是正确的。 DseDemon 字符串是唯一比Jps 小一的字符串。 RunJar 更大,Jps equal 因此两者都不会打印。尝试包含11111 Jpr 的另一行,看看会发生什么,我想你会发现它打印得很好。如果要在输出中包含 Jps 行,则应使用 <= 而不是 <。
您可以在 awk 中使用标准布尔运算符进行字符串比较,这与在 C 中必须使用 strcmp() 不同。
echo "xxx yyy" > test.txt
cat test.txt | awk '$1!=$2 { print($1 $2); }'
【讨论】:
awk '...' test.txt。感谢您的链接。
您可以在nawk manual查看答案
echo aaa bbb | awk '{ print ($1 >= $2) ? "true" : "false" }'
【讨论】: