一段awk代码的疑问
ls -lS 当前目录文件如下:
total 24 -rwxr-xr-x 1 root root 463 Dec 11 21:34 remove_duplication.sh -rw-r--r-- 1 root root 248 Dec 11 20:12 other -rw-r--r-- 1 root root 6 Dec 11 20:10 test -rw-r--r-- 1 root root 6 Dec 11 20:11 test_copy1 -rw-r--r-- 1 root root 6 Dec 11 20:11 test_copy2 -rw-r--r-- 1 root root 6 Dec 11 20:11 test_copy3
是用awk做的,还没写完,但是发现了一些疑问
去重脚本如下(还未完成):
#! /bin/bash ls -lS | awk 'BEGIN{ getline;getline size=$5; lastName=$9 } { currentName=$9 if(size==$5) { "md5sum "lastName | getline; csum1=$1; "md5sum "currentName | getline; csum2=$1; if(csum1==csum2) { print lastName print currentName } }; size=$5 lastName=currentName } '
test test_copy1 test_copy2 test_copy3
test test_copy1 test_copy1 test_copy2 test_copy2 test_copy3
之后将当前的名字test_copy1赋给lastName,下一个循环继续比较,也就是test_copy2和test_copy1这两个应该满足条件,也就是test_copy1会被重复打印一遍,但是这里却没有,不知道为什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
因为awk的代码段会执行每一行;
而在代码段中若调用getline就会继续读取一样,实际读取两行;
恩,你这个方式也不错,但是我想问的是,为什么我那个写最后结果不是这样的? test test_copy1 test_copy1 test_copy2 test_copy2 test_copy3 按我理解应该test_copy1会被重复打印,但是却没有为什么呢?
回复
建议看一下getline的用法 http://bbs.chinaunix.net/thread-108596-1-1.html 我感觉是getline以后会覆盖 $1,$5等等这些变量。
用awk的数组