免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 46783 | 回复: 48
打印 上一主题 下一主题

读取文件只能读一行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-07 10:33 |只看该作者 |倒序浏览
tt.log文件内容
         14 1048576000 /usr/oracle/data/PRD0.2/store_ix10.dbf   INDICES
         14  367001600 /usr/oracle/data/PRD0.2/store_ix11.dbf   INDICES
         14 1258291200 /usr/oracle/data/PRD0.3/store_new.dbf    STORE_NEW
         18 1048576000 /usr/oracle/data/PRD0.2/store_ix10.dbf   INDICES
         18  367001600 /usr/oracle/data/PRD0.2/store_ix11.dbf   INDICES
         18  157286400 /usr/oracle/data/PRD0.2/store_ix12.dbf   INDICES

我想从tt.log文件中取出1,3列来执行rexec命令
写了ta.sh执行文件,内容如下
while read t1 t2 t3 t4
do
echo $t2 $t4
rexec lshas$t1 "ls -lt $t3|awk '{print \$5,\$9}' "
done <tt.log

为什么执行的时候,只执行第一行啊,我看了执行顺序如下
+ 0< tt.log
+ read t1 t2 t3 t4
+ echo 1048576000 INDICES
1048576000 INDICES
+ rexec lshas10 ls -lt /usr/oracle/data/PRD0.2/store_ix10.dbf|awk '{print $5,$9}'
1048580096 /usr/oracle/data/PRD0.2/store_ix10.dbf
+ read t1 t2 t3 t4

不读第二行,请高手指教。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2006-06-07 12:14 |只看该作者
exec 3<tt.log
while read -u3  t1 t2 t3 t4
do
echo $t2 $t4
rexec lshas$t1 "ls -lt $t3|awk '{print \$5,\$9}' "
done
exec 3<&-

论坛徽章:
0
3 [报告]
发表于 2006-06-07 13:19 |只看该作者
谢谢waker 兄帮忙。那为什么我不用exec来执行,光用while就无法取得呢?

论坛徽章:
0
4 [报告]
发表于 2006-06-07 13:34 |只看该作者
谢谢各位的关心:

我修改了一下:我用了个for 循环了
node=`awk '{print $1}' /root/node`
for a in $node ; do
不用while的方式
那种方式的问题可能是读文件的时候读完第一行就认为已经结束,while就退出。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2006-06-07 14:01 |只看该作者

  1. while read t1 t2 t3 t4
  2. do
  3. echo $t2 $t4
  4. sed 's/.*/sed eat the line ( & )/'
  5. done <tt.log
复制代码

看看这个例子,就知道其它的数据到哪儿去了吧?

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
6 [报告]
发表于 2006-06-07 15:07 |只看该作者
原帖由 waker 于 2006-6-7 14:01 发表

while read t1 t2 t3 t4
do
echo $t2 $t4
sed 's/.*/sed eat the line ( & )/'
done <tt.log

看看这个例子,就知道其它的数据到哪儿去了吧?

这个解释帅呆了
[root@142 work]# while read kkk; do echo $kkk; sed 's/.*/sed eat the line ( & )/'; done <ytail.sh
#set nohup.out
sed eat the line (  )
sed eat the line ( back_off=${2:-39} )
sed eat the line ( for((;) )
sed eat the line ( do )
sed eat the line (      size=$(ls -l $1 | awk '{print $5}') )
sed eat the line (      hexdump -s $((size - back_off)) -C $1 | awk -F "|" '{printf $2}' )
sed eat the line (      echo )
sed eat the line (      sleep 5 )
sed eat the line ( done )
sed eat the line (  )

[ 本帖最后由 yjh777 于 2006-6-7 15:11 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-06-08 16:07 |只看该作者
原帖由 pvb1979 于 2006-6-7 10:33 发表
...
while read t1 t2 t3 t4
do
echo $t2 $t4
rexec lshas$t1 "ls -lt $t3|awk '{print \$5,\$9}' "
done <tt.log
...

没有环境测试,或者LZ可以给rexec加上小括号试试?
(rexec lshas$t1 "ls -lt $t3|awk '{print \$5,\$9}' ")

论坛徽章:
0
8 [报告]
发表于 2006-06-08 21:16 |只看该作者
done前加一句 shift 4

论坛徽章:
0
9 [报告]
发表于 2006-06-09 09:11 |只看该作者
路过。不错。。

论坛徽章:
0
10 [报告]
发表于 2006-08-14 14:20 |只看该作者
好.又学会一招.哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP