awk if 循环无法打印

awk if 循环无法打印

我有一个变量Test如下

Test="Environment Dev"

我想将col2char 1 与其他字符进行比较并打印 env 的全名

这就是我所做的

echo $Test|awk '{
if ($2 == "^D*")
print "DEV";
else
print "$2"
}'

我得到了$2输出,但如果它是 Test ,DT我想要的输出相比TEST

我也尝试过这个,但输出在改变时没有改变col2

echo $Test|awk '{
if ($2 ~ "^D*")
print "DEVELOPMENT"
else
print "$2"
}'
DEVELOPMENT

请帮助我犯错误的地方

答案1

我在您的 awk 脚本中看到一些错误:

  • 用于~ /whatever/正则表达式。
  • 不要在^D正则表达式中添加星号,它也会匹配零个D字符。
  • 删除 周围的引号$2以避免逐字打印。

一个可能的解决方案:

echo $Test | awk '{
if ($2 ~ /^D/)
  print "DEV";
else
  print $2
}'

答案2

如果您使用bashor kshor zsh,您甚至不需要使用awk,您可以使用${parameter#word}来删除前缀...在本例中为“第一个空格之前的所有字符”的前缀:

$ Test="Environment Dev"
$ SecondWord=${Test#* }
$ echo $SecondWord
Dev

$ [[ $SecondWord =~ ^D ]] && echo DEV || echo $SecondWord
DEV

$ SecondWord=Foo
$ [[ $SecondWord =~ ^D ]] && echo DEV || echo $SecondWord 
Foo

这可能适用于其他一些类似 Bourne 的 shell,但我仅在上面提到的三个 shell 中进行了测试。

顺便说一句,如果您想要“贪婪”匹配(即最长的匹配字符串而不是最短的匹配字符串,以便您得到最后一个单词而不是第二个和后续单词(如果有的话)),请使用##而不是#.

相关内容