Nab*_*idu 2 bash shell scripting awk
我有一个字符串a
[root@rh-1 ~]# echo $a
4 11 10 7 11
Run Code Online (Sandbox Code Playgroud)
需要根据文件表中的id字段检查这组值
[root@rh-1 ~]# cat table
id name inuse rules
1 Critical data 0 ...
2 Important data 0 ...
3 Normal data 0 ...
4 nc-test 0 ...
5 schedule one 0 ...
7 foo sc2 0 ...
8 foo sc3 0 ...
9 foo-sc4 0 ...
10 foo_sc5 0 ...
11 foosc6 0 ...
Run Code Online (Sandbox Code Playgroud)
只要id是$ a中的数字之一,我需要将inuse列的值替换为1.可以丢弃规则列
[root@rh-1 ~]# cat table | awk -v a="$a" ' {
split(a,sid," "); NF=NF-1;}
{ $NF=0;n=length(sid);
for (i=1;i<n;i++)
{ if($1 == sid[i]){
sub($NF,1);
break;
}
}
if($1=="id")
print("mid name InUse" );
else
printf("%-25s\n",$0);
} '
Run Code Online (Sandbox Code Playgroud)
上面的方法有效,但由于某种原因,在第10行foo_sc5而不是在结尾处替换0,到10 foo_sc5 1它将替换为11 foo_sc5 0
而所有其他人都被正确更换.
mid name InUse
1 Critical data 0
2 Important data 0
3 Normal data 0
4 nc-test 1
5 schedule one 0
7 foo sc2 1
8 foo sc3 0
9 foo-sc4 0
11 foo_sc5 0
11 foosc6 1
[root@rh-1 ~]#
Run Code Online (Sandbox Code Playgroud)
不知何故,只替换该特定线路是错误的.有人可以帮忙吗?
替换sub($NF,1)为$NF=1.
sub($NF,1)使用$NF作为正则表达式和,为了在线路的第一次出现,它与替换1.自从$NF开始时0,这意味着该行中的第一个零被替换为一个.
相比之下,$NF=1仅将最后一列设置为一列.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |