用bash爆炸文件

时间:2012-07-29 14:20:49

标签: php linux bash explode

我正在尝试做的是在我的应用程序上的bash脚本中模拟一个2D数组。 (我是用bash写它的白痴,但是在我的截止日期之前我有一份工作副本我会重写它)

我要读取的server.data文件:

1:hello:there
2:im:a
3:computing:system

我知道PHP ALOT比bash好,但这里是我的意思的伪代码

foreach(line in server.data) {         
 arr = explode(":", server.data)  
  echo arr[0]    
  echo arr[1]  
  echo arr[2]  
  echo \n  
}

会返回这些值:

1 hello there
2 im a
3 computing system

有人可以编写一个小的bash脚本,解释如何将每一行放入数组中吗?

5 个答案:

答案 0 :(得分:5)

cat server.data | 
while read line; do  
   IFS=: 
   set - $line
   echo $1  
   echo $2  
   echo $3
done

答案 1 :(得分:3)

更一般的答案:如果你想模仿php"爆炸"在bash中只有一个字符串(或来自文件的数据),你可以使用类似的东西:

#!/bin/bash
# explode functionality in bash

data="one:two:three:and 4"

echo $data | while read line; do
   IFS=:
   set - $line
   echo $1
   echo $2
   echo $3
   echo $4
done

如果您的数据另一方面来自文件,那么您可以将文件的内容重定向到while循环:

  #!/bin/bash
  # explode 

  filename="data"

  while read line; do
     IFS=:
     set - $line
     echo $1
     echo $2
     echo $3
     echo $4
  done < $filename

此重定向优于cat $filename进入while循环,因为它不需要分叉另一个进程。

答案 2 :(得分:0)

假设文本文件名为“x.txt”:

#!/bin/bash

for line in `cat x.txt`; do
    a[${i}]=$line;
    i=$i+1;
done;

echo ${a[0]};
echo ${a[1]};
echo ${a[2]};

答案 3 :(得分:0)

while IFS=: read -a arr; do
    echo "${a[@]}"
    echo -n "${arr[0]} "
    echo -n "${arr[1]} "
    echo "${arr[2]}"
done < server.data

echo语句只是演示了访问数组的一些方法;所有工作都由read -a完成。

答案 4 :(得分:0)

这为您提供了一个伪二维数组,您可以通过连接每个维度索引来访问各个元素:

while read line
do
    ((i++))
    j=0
    IFS=:
    for e in $line
    do
        ((j++))
        lines["$i$j"]=$e
    done
done < data.txt

echo ${lines[@]}
1 hello there 2 im a 3 computing system
echo ${lines[12]}
hello