我有一个例子:
echo $(seq 9) | awk '{for(i=1;i<=NF;i++) if(i!=5&&i!=6) {printf "%s ",i}else{printf "%s ",""} print ""}'
1 2 3 4 7 8 9
是否可以使用该命令的简写?
echo $(seq 9)| awk '{for(i=1;i<=NF;i++) (i!=5&&i!=6) ? {printf "%s ",i} : {printf "%s ",""} print ""}'
谢谢你的解释。
答案1
有可能,但不是那样。您必须向三元运算符提供表达式。在 AWK 中printf
是一个语句,因此您不能在那里使用它,就像您两者都不能使用{}
一样。
因为无论如何你都不需要两个printf
语句,所以最好这样写:
seq -s ' ' 9 | awk '{for(i=1;i<=NF;i++) printf "%s ", i!=5&&i!=6 ? i : ""; print ""}'