AWK打印特定的列,如果选择的列只是数字,否则打印另一个列AIX



如果选择的列只有值或字符,是否可以使用awk if条件来打印特定的列?

下面的是一个例子:

echo "This is example test 1 for VAL1 value = int or VAL2 = string" | awk '{if ($5 == [0-9]) print $10 else print $14}'

或:

echo "This is example test one for VAL1 value = int or VAL2 = string" | awk '{if ($5 == [A-Z]) print $14; else print $10}'

上面的两个例子是从awk中判断第5列是全值还是全数字,如果只有数字还是有字符串字符,则根据列打印一个特定的列。在我的例子中,它只能是一个或两者之一,不能同时与数字和字符混合。

使用awk怎么可能做到这一点?

问题是:

$5 == [0-9]

awk中,我们使用==算子来表示相等而不是正则表达式求值。我们必须使用~来表示正则表达式,并在/.../符号中包含一个正则表达式。

所以所有这些awk解决方案都应该为你工作:

# check presence of a digit anywhere in the fifth field
awk '{print ($5 ~ /[0-9]/ ? $10 : $14)}'
# check if fifth field contains 1+ digits only
awk '{print ($5 ~ /^[0-9]+$/ ? $10 : $14)}'
# awk shorthand to check if $5 is numeric value
awk '{print ($5+0 == $5 ? $10 : $14)}'

类似地检查大写字符使用:

awk '{print ($5 ~ /[A-Z]/ ? $14 : $10)}'

最新更新