awk - 如何为不同的if语句分配不同的值给变量
问题描述
我有一个包含 4 列的文本文件。我需要修改文件,使第 4 列中的第一个 1 序列保持 1,但第 4 列中的所有其他值都更改为 0。
我用多个 if 语句尝试了以下 awk 命令,但变量 fat 似乎没有正确更新。
`cat sample_data.txt`
72 29 16 0 <br>
73 30 16 0 <br>
74 31 16 0 <br>
75 32 16 1 <br>
76 33 16 1 <br>
77 34 16 1 <br>
78 35 16 0 <br>
79 36 16 0 <br>
80 37 16 0 <br>
81 38 16 0 <br>
82 39 16 0 <br>
83 40 16 0 <br>
84 41 16 0 <br>
85 42 16 0.55 <br>
86 43 16 0.57 <br>
87 44 16 0.41 <br>
88 45 16 0.58 <br>
89 46 16 1 <br>
90 47 16 1 <br>
91 48 16 1 <br>
92 49 16 1 <br>
93 50 16 0.59 <br>
94 51 16 0.52 <br>
95 52 16 0.43 <br>
`awk -v fat=1 '{if($4<1 && fat=1) {print $1,$2,$3,0;} else if($4=1 && fat=1) {fat=2;print $1,$2,$3,1;} else if($4=1 && fat=2) {fat=2;print $1,$2,$3,1;} else if($4<1 && fat=2) {fat=3;print $1,$2,$3,0} else if($4<1 && fat=3) {fat=3;print $1,$2,$3,0;} else if($4=1 && fat=3) {fat=3;print $1,$2,$3,0;}}' sample_data.txt`
我想要这个输出:
72 29 16 0 <br>
73 30 16 0 <br>
74 31 16 0 <br>
75 32 16 1 <br>
76 33 16 1 <br>
77 34 16 1 <br>
78 35 16 0 <br>
79 36 16 0 <br>
80 37 16 0 <br>
81 38 16 0 <br>
82 39 16 0 <br>
83 40 16 0 <br>
84 41 16 0 <br>
85 42 16 0 <br>
86 43 16 0 <br>
87 44 16 0 <br>
88 45 16 0 <br>
89 46 16 0 <br>
90 47 16 0 <br>
91 48 16 0 <br>
92 49 16 0 <br>
93 50 16 0 <br>
94 51 16 0 <br>
95 52 16 0 <br>
解决方案
写你的代码:
if($4<1 && fat=1)
fat=1
是一个作业,一个等效测试将是fat==1
(double equals) 代替。
但无论如何,这里是如何用一个简单的FSM做你想做的事情:
$ awk '(state==0) && ($4==1){state=1} (state==1) && ($4!=1){state=2} state==2{$4=0} 1' file
72 29 16 0
73 30 16 0
74 31 16 0
75 32 16 1
76 33 16 1
77 34 16 1
78 35 16 0
79 36 16 0
80 37 16 0
81 38 16 0
82 39 16 0
83 40 16 0
84 41 16 0
85 42 16 0
86 43 16 0
87 44 16 0
88 45 16 0
89 46 16 0
90 47 16 0
91 48 16 0
92 49 16 0
93 50 16 0
94 51 16 0
95 52 16 0
推荐阅读
- python - 为什么我在尝试删除 Target 小部件时收到此错误 AttributeError: 'NoneType' object has no attribute 'remove_widget'?
- go - 问 import undefined Go
- c - 将插件添加到 C 程序
- reactjs - Highcharts React 使用日期时间轴更新动画
- amazon-web-services - Docker 映像大小在 aws ecr 上更改
- javascript - 关于将 html 文件转换为 json 以用于 react-email-editor 的问题
- javascript - 在组件之间传递 props | 反应
- reactjs - 有什么方法可以使 React Material-UI 单选按钮成为必需
- botframework - 无法使用 Bot Framework SDK v4 在 MS Teams 中呈现自适应卡
- python - 如何使用 langid LanguageIdentifier 使用 set_languages