免费注册 查看新帖 |

Chinaunix

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

如果实现多参数,多组数据的存储和读取 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-14 16:15 |只看该作者 |倒序浏览
比如文件:
0 1 3 4
1 2 3 4
5 6 7 8
3 4 5 6

我怎么读出任意一行的任何一个数值?
while read line
do
a=`echo $line|awk '{print $1}'`
b=`echo $line|awk '{print $2}'`
c=`echo $line|awk '{print $3}'`
d=`echo $line|awk '{print $4}'`
test=(a b c d)
done < myfile
这样实现的话能把所有的数据存储到数组test当中么?
我在最后echo ${test[0]}  只能得到3, 那如果我想得到第三行的第一个数字5呢?

[ 本帖最后由 nicktasty 于 2009-8-14 16:17 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-08-14 16:29 |只看该作者

回复 #1 nicktasty 的帖子

这个是不是应该用perl啊!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
3 [报告]
发表于 2009-08-14 16:30 |只看该作者
  1. awk -v m=$m -v n=$n '{for(i=1;i<=NF;i++)a[NR","i]=$i}END{print a[m","n]}' urfile
复制代码


$m和$n变量分别为行和列数

论坛徽章:
0
4 [报告]
发表于 2009-08-14 16:40 |只看该作者
原帖由 Minsic 于 2009-8-14 16:30 发表
awk -v m=$m -v n=$n '{for(i=1;i


没看懂。。。

把我的需求再明确一下:
Step1 首先不确定源文件里有几行,只知道格式,我需要把一行里我需要的数据逐个提取出来,然后读取下一行。。。
形成一个我开始提到的数组结构。
Step2 读完之后,我需要把刚才提取的数据逐行逐个再提取出来用来实现某种用途。。。比如用array[m n] (m,n表述行、列)来代表一个具体的值,shell能实现么?

[ 本帖最后由 nicktasty 于 2009-8-14 16:45 编辑 ]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
5 [报告]
发表于 2009-08-14 17:00 |只看该作者
bash处理数组不如awk有效率啊,而且bash不支持关联数组吧,那就不能构造出类似你需要的二维数组——即便是伪二维。

前面比如你需要第三行的第一列数据5,那就跑跑这个:

  1. awk -v m=3 -v n=1 '{for(i=1;i<=NF;i++)a[NR","i]=$i}END{print a[m","n]}' urfile
复制代码


你的操作也可以视情况决定是否在awk里执行

论坛徽章:
0
6 [报告]
发表于 2009-08-14 17:04 |只看该作者
bash不支持多维数组

论坛徽章:
0
7 [报告]
发表于 2009-08-14 17:07 |只看该作者
原帖由 Minsic 于 2009-8-14 17:00 发表
bash处理数组不如awk有效率啊,而且bash不支持关联数组吧,那就不能构造出类似你需要的二维数组——即便是伪二维。

前面比如你需要第三行的第一列数据5,那就跑跑这个:

awk -v m=3 -v n=1 '{for(i=1;i


不行,有语法错误-_-

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
8 [报告]
发表于 2009-08-14 17:10 |只看该作者

回复 #7 nicktasty 的帖子

我这跑没问题:

[oracle@Minerva practice]$ cat urfile
0 1 3 4
1 2 3 4
5 6 7 8
3 4 5 6
[oracle@Minerva practice]$ awk -v m=3 -v n=1 '{for(i=1;i<=NF;i++)a[NR","i]=$i}END{print a[m","n]}' urfile
5
[oracle@Minerva practice]$


你的系统?awk的版本?

论坛徽章:
0
9 [报告]
发表于 2009-08-14 17:18 |只看该作者
$ cat error3
0 1 3 4
1 2 3 4
5 6 7 8
3 4 5 6
$ awk -v m=3 -v n=1 '{for(i=1;i<=NF;i++)a[NR","i]=$i}END{print a[m","n]}' error3
awk: syntax error near line 1
awk: bailing out near line 1

系统是SunOS 5.10  ,aws版本咋看?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
10 [报告]
发表于 2009-08-14 17:19 |只看该作者
知道是solaris也行……

用/usr/xpg4/bin/awk来代替试试看,nawk应该也可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP