免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 19180 | 回复: 21

[其他] shell 按行读取并保存成数组 [复制链接]

论坛徽章:
0
发表于 2014-06-22 23:54 |显示全部楼层
如test 文件如:
a a1 a2
b b1 a3
c c1 a4
d d1 a5

a.sh 如:

#!/bin/bash
ARRAY=($(awk '{print $0}' test))
for i in ${ARRAY[*]}
do
echo ${i}
done

a.sh 的执行结果是:
a
a1
a2
b
b1
a3
c
c1
a4
d
d1
a5


我现在想让数组ARRAY存放整行。如执行结果如:
a a1 a2
b b1 a3
c c1 a4
d d1 a5

这个shell 应该怎么写,大家帮忙看看下

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2014-06-23 00:22 |显示全部楼层
行处理用while read,  数组用 read -a :
  1. #!/bin/bash
  2. while read -a ARRAY
  3. do
  4. echo ${ARRAY[@]}
  5. done < test
复制代码

论坛徽章:
0
发表于 2014-06-24 19:15 |显示全部楼层
本帖最后由 lmtwl 于 2014-06-24 19:19 编辑

回复 2# 关阴月飞
谢谢,一语惊醒梦中人。
还有个问题,我要把运行结果存储为数组,应该怎么处理。不一定是文件
比如 route -n |grep -v 0.0.0.0 |awk '{print $1,$3}' 这样的结果存储为数组。

   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2014-06-24 19:27 |显示全部楼层
回复 3# lmtwl
  1.    arr=($(route -n |grep -v 0.0.0.0 |awk '{print $1,$3}' ))
复制代码

论坛徽章:
0
发表于 2014-06-24 19:34 |显示全部楼层
本帖最后由 lmtwl 于 2014-06-24 19:40 编辑

回复 4# 关阴月飞


    这样是不行的,我本意是获取 ip 和掩码 ,在同一行存储,上面执行后是,结果是分别存储了ip和掩码断。
我在bash中
  1. root@testlog:~# bash --version
  2. GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)
  3. Copyright (C) 2011 Free Software Foundation, Inc.
  4. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

  5. This is free software; you are free to change and redistribute it.
  6. There is NO WARRANTY, to the extent permitted by law.
复制代码
  1. arr=($(route -n |grep -v 0.0.0.0 |awk '{print $1,$3}' ))
  2. arr=$(route -n |grep -v 0.0.0.0 |awk '{print $1,$3}' )
复制代码
是没有任何区别的

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2014-06-24 19:41 |显示全部楼层
回复 5# lmtwl


    将ip和掩码 以这种形式输出行不行: ip/掩码

   arr=($(route -n |grep -v 0.0.0.0 |awk '{print $1"/"$3}' ))

论坛徽章:
0
发表于 2014-06-24 19:43 |显示全部楼层
本帖最后由 lmtwl 于 2014-06-24 19:44 编辑

回复 6# 关阴月飞
这种应用不一定是ip/mask的应用,这只是个例子,需要的是这种结果。不知道怎么处理。

需要的是这种存储方式
   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2014-06-24 19:58 |显示全部楼层
本帖最后由 关阴月飞 于 2014-06-24 19:59 编辑

回复 7# lmtwl


    大概明白你的意思了,意思是命令输出有多行,每行的内容中存在空格 制表符之类的东东,想把整个输出保存到一个数组:
  1. while read line
  2. do
  3. arr[n++]="$line"
  4. done < <(route -n |grep -v 0.0.0.0 |awk '{print $1,$3}')
复制代码

论坛徽章:
0
发表于 2014-06-24 20:09 |显示全部楼层
回复 8# 关阴月飞


    这样还是麻烦,刚看了下IFS
  1. export IFS='
  2. '
  3. arr=(`route -n |grep -v 0.0.0.0 |awk '{print $1,$3}'`)
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2014-06-24 20:13 |显示全部楼层
本帖最后由 关阴月飞 于 2014-06-24 20:14 编辑

回复 9# lmtwl


    如果不会对其它命令造成影响   改IFS是个好方法   改之前备个份,用完后最好改回来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP