免费注册 查看新帖 |

Chinaunix

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

远程读取文件问题 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:51:16
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-24 19:15 |只看该作者 |倒序浏览
[code]
#cat test
xiao3   10:00:01        50
aa      11:25:22        66
bb      12:44:33        200
cc      14:33:22        333
[code]
如何远程读取,一次读取一行给一个变量?谢谢指点!

论坛徽章:
0
2 [报告]
发表于 2009-03-24 19:25 |只看该作者
while read line
do
echo $line
done<test

论坛徽章:
0
3 [报告]
发表于 2009-03-24 19:28 |只看该作者
远程读取?传过来再读不行?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:51:16
4 [报告]
发表于 2009-03-24 19:32 |只看该作者
谢谢回答!
我的意思是 远程读取

能否像
[code]
for x in `ssh XXX.XXX.XXX.XXX "cat /tmp/test"`;
do

;done
[code]
但是cat 根据空格一个一个付值给变量,本人read不熟,但是也试过while read,但是后面跟ssh 貌似不行,即使加上了-n,如果read可以,希望指点一下.谢谢!

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:51:16
5 [报告]
发表于 2009-03-24 20:24 |只看该作者
难道没有现成的函数或者命令吗??


  1. 在远程机器上执行
  2. # cat /root/test
  3. xiao3   10:00:01        50
  4. aa      11:25:22        66
  5. bb      12:44:33        200
  6. cc      14:33:22        333



  7. 本地机器上脚本
  8. #!/bin/bash

  9. n=1
  10. for x in `ssh XXX.XXX.XXX.XXX "cat /root/test"`;
  11. do
  12.         if [ `expr ${n} % 3` -eq 1 ]
  13.         then
  14.                 tmp=`echo -e "${x}"`
  15.         else
  16.                 tmp=`echo -e "${tmp}\t${x}"`
  17.         fi
  18.         if [ `expr ${n} % 3` -eq 0 ]
  19.         then
  20.                 echo "$tmp"
  21.                 tmp=""
  22.         fi
  23.         n=`expr $n + 1`
  24. done
复制代码


echo的$tmp 即为远程机器文件的一行,但是感觉我自己的这种方法很原始,很笨,而且如何文件每行不一样,脚本就作废。所以希望能找到更好的方法。没有人分享一下思路吗

[ 本帖最后由 jxg945 于 2009-3-24 20:37 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-03-24 20:30 |只看该作者
你这个思路不行吗?
for x in `ssh XXX.XXX.XXX.XXX "cat /root/test"`;
这句能成功就没问题了啊,至于文本内容的处理可以再用awk、sed等处理啊

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:51:16
7 [报告]
发表于 2009-03-24 20:34 |只看该作者
针对文件格式固定是可以的,每行都是3个值的是可以的,但是如果每行值个数不同这种思路就不行了。如下面数据

xiao3   10:00:01        50
aa      11:25:22        66
bb      12:44:33        200
cc      14:33:22        333
cc      14:33:22        333     444
aaa     sssssss

我就是想问问有没有读一行,遇到换行才返回的那种方式。

论坛徽章:
0
8 [报告]
发表于 2009-03-24 20:57 |只看该作者
你test文件的数据要如何处理呢?
针对你要的数据可以预先处理吧
for x in `ssh XXX.XXX.XXX.XXX "cat /root/test | awk ...."`;

比如你字段数大于3的数据行不要,那就
for x in `ssh XXX.XXX.XXX.XXX "cat /root/test | awk 'NF<=3'"`;
不过多了一层单引号,会不会报错,我只是说个思路

[ 本帖最后由 ywlscpl 于 2009-3-24 21:00 编辑 ]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:51:16
9 [报告]
发表于 2009-03-24 22:29 |只看该作者
原帖由 ywlscpl 于 2009-3-24 20:57 发表
你test文件的数据要如何处理呢?
针对你要的数据可以预先处理吧
for x in `ssh XXX.XXX.XXX.XXX "cat /root/test | awk ...."`;

比如你字段数大于3的数据行不要,那就
for x in `ssh XXX.XXX.XXX.XXX "ca ...


非常感谢你的思路,你说得很对,对不同的值可以用判断处理。谢谢。

论坛徽章:
0
10 [报告]
发表于 2009-03-24 22:29 |只看该作者
原帖由 jxg945 于 2009-3-24 20:34 发表
针对文件格式固定是可以的,每行都是3个值的是可以的,但是如果每行值个数不同这种思路就不行了。如下面数据

xiao3   10:00:01        50
aa      11:25:22        66
bb      12:44:33        200
cc    ...

你怎么不用用DBA推荐的方法呢?
ssh username@ip cat /etc/passwd|while read line ;do echo $line;done
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP