如果选择的列只有值或字符,是否可以使用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)}'