免费注册 查看新帖 |

Chinaunix

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

怎样从文件中读如数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-15 07:57 |只看该作者 |倒序浏览
比如有个文本文件内容是:
192.168.0.1   10K    30K
192.168.0.3    20K   40K
192.168.0.10  10K    20K

怎样把这个文件的内容读入3个数组
比如
a[0]=192.168.0.1 b[0]=10k c[0]=30k
a[1]=192.168.0.2 b[1]=20k c[1]=40k
a[2]=192.168.0.10 b[2]=10k c[2]=20k

从来没有遍过复杂的shell,请各位帮忙

论坛徽章:
0
2 [报告]
发表于 2004-12-15 11:52 |只看该作者

怎样从文件中读如数据

哈哈,这几天我也差不多在处理这个问题。我们就切磋一下吧。嘻嘻!
我提供一个大体思路(帮你编写就扼杀你的思维了:)其实是我比较偷懒)和注要命令,要是有所幼稚之处,还请其他高手不要笑话我。

#!/bin/bash
# define function
function move
{
# add for loop
for (( i=1;i<=${hang};i++ ))
do
ip=`sed -n "${i}p" ${ogfile} |awk '{print $1}'`
lie_1=`sed -n "${i}p" ${ogfile} |awk '{print $2}'`
lie_2=`sed -n "${i}p" ${ogfile} |awk '{print $3}'`
# awk也可以用cut代替,关键看你的文件

j=$(( ${i}-1 ))
echo "a[${j}]=${ip} b[${j}]=${lie_1} c[${j}]=${lie_2}" >>${endfile}
done
}

# enviroment setting
# 假设初始文件为iplst、生成文件为endlst
# 假设你的工作目录为usr,文件都在这个目录下处理
basedir=/home/usr/
orgfile=${basedir}iplst
endfile=${basedir}endlst

hang=`wc -l ${orgfile}|awk '{print $1}'`
# 上午忘记加awk过滤文件名,这会要人命。下午补上

#program
case ${1} in
-move)
    move;;
-help)
# 这个留给你直接写
    help;;
*)
    help;;
esac

真惨,好像写得差不多了。

论坛徽章:
0
3 [报告]
发表于 2004-12-15 16:23 |只看该作者

怎样从文件中读如数据

您是这个意思吗?

#!/bin/ksh

set -A a $(cat file | awk '{print $1}')
set -A b $(cat file | awk '{print $2}')
set -A c $(cat file | awk '{print $3}')
echo ${a[0]}
echo ${a[1]}
echo ${a[2]}

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-12-15 16:34 |只看该作者

怎样从文件中读如数据

/home/lee/test#set -A a $(cut -f1 -d' ' <file)
/home/lee/test#echo ${a[0]}
192.168.0.1
/home/lee/test#set -A b $(cut -f2 -d' ' <file)
/home/lee/test#echo ${b[2]}
10K
/home/lee/test#set -A c $(cut -f3 -d' ' <file)
/home/lee/test#echo ${c[1]}
40K
/home/lee/test#

论坛徽章:
0
5 [报告]
发表于 2004-12-15 17:47 |只看该作者

怎样从文件中读如数据

呜呜,我忘记仔细看题了。人家只是想读取数据,又不是想导入到另外一个文件中。

论坛徽章:
0
6 [报告]
发表于 2004-12-16 12:20 |只看该作者

怎样从文件中读如数据

明白了,其实我的本意是shell能不能象c++
用<<一条语句就搞定.

呵呵,谢谢各位.

论坛徽章:
0
7 [报告]
发表于 2004-12-16 14:42 |只看该作者

怎样从文件中读如数据

笨方法一个:

  1. [kennyyu@haha shellTestRoom]$ more data.dat
  2. 192.168.0.1 10K 30K
  3. 192.168.0.3 20K 40K
  4. 192.168.0.10 10K 20K
  5. [kennyyu@haha shellTestRoom]$ more 1.sh
  6. #! /bin/sh

  7. while read line
  8. do
  9. line=(${line})
  10. a=(${a[*]} ${line[0]})
  11. b=(${b[*]} ${line[1]})
  12. c=(${c[*]} ${line[2]})
  13. done < data.dat

  14. echo ${a[0]} ${a[1]} ${a[2]}
  15. echo ${b[*]}
  16. echo ${c[*]}
  17. [kennyyu@haha shellTestRoom]$ ./1.sh
  18. 192.168.0.1 192.168.0.3 192.168.0.10
  19. 10K 20K 10K
  20. 30K 40K 20K
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP