shell 脚本 while read a b c d ;do done语句中 a b 的值于最外层不一致
发布网友
发布时间:2022-04-22 19:09
我来回答
共1个回答
热心网友
时间:2023-11-16 09:03
while循环一次只读一行,直至读到文件末尾。你试试下面这个:
while read line
do
echo "$line"
done <./data/1/statusl.txt
就会打印:
335
1
2
00
你要把每行取出来分别赋给一个变量的话,用sed 或 head 即可。
a=`sed -n '1p' ./data/1/statusl.txt`
b=`sed -n '2p' ./data/1/statusl.txt`
或者
a=`head -n 1 ./data/1/statusl.txt`
b=`head -n 2 ./data/1/statusl.txt`
而且上面的awk语句也有错误,把$a,$b放在单引号里面会被认为是awk的变量,不会被shell解析并替换成对应的值的。需要拿到单引号外面来(在$a前关闭单引号,$a之后再打开;$b同样处理)。并且,awk默认的字段分隔符就是空格,所以没必要再用 -F 指定。
修改如下:
awk '{if($1==‘$a’ && $2==‘$b’){print $1;}print ‘$a’,22}' ./data/1/statusl.txt
最后,实在不知道你要干什么。因为awk本身就会读文件,而且也是一行一行地读。
statusl.txt 只有1列,以空格作为分隔符,只能得到一个字段($1),$2不存在。 所以,上面我改的那句其实也是不对的。