| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3389 人关注过本帖
标题:请教一个shell问题?
只看楼主 加入收藏
冬冬123
Rank: 2
等 级:论坛游民
帖 子:80
专家分:67
注 册:2013-3-3
结帖率:80%
收藏
 问题点数:0 回复次数:1 
请教一个shell问题?
linux版本:
[root@localhost aw]# uname -a
Linux localhost.localdomain 3.10.0-1160.25.1.el7.x86_64 #1 SMP Wed Apr 28 21:49:45 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
用作测试的目录下的文件
[root@localhost aw]# ls -lS --time-style=long-iso
总用量 24
-rwxr-xr-x 1 root root 286 2021-06-10 15:56 remove.sh
-rw-r--r-- 1 root root   9 2021-06-10 15:55 arg1
-rw-r--r-- 1 root root   9 2021-06-10 15:55 arg2
-rw-r--r-- 1 root root   9 2021-06-10 15:55 arg3
-rw-r--r-- 1 root root   9 2021-06-10 15:56 arg4
-rw-r--r-- 1 root root   9 2021-06-10 16:29 arg5

代码一
#!/bin/bash
ls -lS --time-style=long-iso | awk 'BEGIN {
 getline; getline;
 name1=$8; size=$5
}
{
 name2=$8;
 if (size==$5)
 {
 "md5sum "name1 | getline; csum1=$1;
 "md5sum "name2 | getline; csum2=$1;
 if ( csum1==csum2 ) { print name1; print name2 }
 };
 size=$5; name1=name2;
}'
输出结果:
[root@localhost aw]# ./remove.sh
arg1
arg2
arg3
arg4

代码二
#!/bin/bash
ls -lS --time-style=long-iso | awk 'BEGIN {
 getline; getline;
 name1=$8; size=$5
}
{
 name2=$8;
 if (size==$5)
 { print name1; print name2 };
 size=$5; name1=name2;
}'
输出结果:
[root@localhost aw]# ./remove1.sh
arg1
arg2
arg2
arg3
arg3
arg4
arg4
arg5

请问代码一代码二输出的结果为何不同?
搜索更多相关主题的帖子: size localhost 代码 shell print 
2021-06-10 16:40
冬冬123
Rank: 2
等 级:论坛游民
帖 子:80
专家分:67
注 册:2013-3-3
收藏
得分:0 
经验证,发现事故原因出现在:
 "md5sum "name1 | getline; csum1=$1;
 "md5sum "name2 | getline; csum2=$1;

当getline;执行后,外部的$5将改变为空值(即ls -lS --time-style=long-iso | awk中当前行的$5),影响最终输出的正确性。
应当将此句改为"md5sum "name1 | getline temp; csum1=$1; 当getline将获取的内容传递给指定变量后,就不会影响awk的$n等内部变量了。

天下寒士俱欢言!!!
2021-06-23 16:44
快速回复:请教一个shell问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014690 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved