我是 awk 新手并正在尝试使用它。当尝试使用三元运算符时,在某些时候我想在真实条件下执行两个操作,并且由于我找不到执行此操作的语法,因此我尝试在条件内走私两个操作之一以利用懒惰评价。
我有一个输入文件如下:
file.csv
A,B,C,D
1,,,
2,,,
3,,,
4,,,
5,,,
6,,,
7,,,
8,,,
Run Code Online (Sandbox Code Playgroud)
为了练习的目的,如果 A 小于 5,我想将 B 和 C 赋值为 0 ;如果 A 为 5 或更大,则 C 为 1。我想三元运算符是一种糟糕的方法,但这不是我的观点。
问题是:为什么下面的行会输出这个结果?awk 如何解析这个表达式?
awk '(FNR!=1){$1<5 && $3=0 ? $2=0 : $2=1}{print $0}' FS=, OFS=, file.csv
输出:
1,1,1,
2,1,1,
3,1,1,
4,1,1,
5,,,
6,,,
7,,,
8,,,
Run Code Online (Sandbox Code Playgroud)
我期望$3=0表达式被执行并计算为true,并且当条件 ( $1<5) 的第一部分为 false 时被跳过。
预期结果:
1,0,0,
2,0,0,
3,0,0,
4,0,0,
5,1,,
6,1,,
7,1,,
8,1,,
Run Code Online (Sandbox Code Playgroud)
额外的问题:我实际上可以使用三元运算符并根据条件值在其中执行几条指令吗?这只是一种不好的做法还是实际上不可能?
awk ×1