使用shell脚本将文本文件提取到变量

时间:2014-01-31 21:18:31

标签: linux shell

我在文本文件中有一组数据。

aaa:bbb:ccc
ddd:fff:ggg

,由':'分隔,我有一个变量1,2和3.如何分割数据,比如说我只对aaa行感兴趣。所以我将得到1 = aaa,2 = bbb和3 = ccc。

尝试使用

1=grep "$a" textfile.txt | awk -F ':' '{print $1}'

2=grep "$a" textfile.txt | awk -F ':' '{print $2}'

3=grep "$a" textfile.txt | awk -F ':' '{print $3}'

但不起作用。请指教。谢谢!

3 个答案:

答案 0 :(得分:3)

试试这个:

VAR1=$(grep "$a" textfile.txt | awk -F ':' '{print $1}')
VAR2=$(grep "$a" textfile.txt | awk -F ':' '{print $2}')
VAR3=$(grep "$a" textfile.txt | awk -F ':' '{print $3}')

您的变量不能只是数字,您需要将grep的输出设置为var(而不是命令本身)

修改

您还可以使用以下内容:

VAR1=$(awk -F ':' '{print $1}' textfile.txt)
VAR2=$(awk -F ':' '{print $2}' textfile.txt)
VAR3=$(awk -F ':' '{print $3}' textfile.txt)

答案 1 :(得分:2)

最简单的方法是使用read bulletin

使用BASH数组
> read -a arr< <(IFS=':' && grep "aaa" file)
> printf "%s\n" "${arr[@]}"
aaa
bbb
ccc

答案 2 :(得分:2)

如果要使用位置参数,可以使用子shell和IFS变量来提取值:

$ line="aaa:bbb:ccc"
$ set -- $(IFS=:; echo $line)
$ echo $1
aaa
$ echo $2
bbb
$ echo $3
ccc

要迭代文件,使用位置参数是不必要的不​​透明:

while IFS=: read -r a b c; do
    echo "$((++line)), a=$a b=$b c=$c"
done < file
1, a=aaa b=bbb c=ccc
2, a=ddd b=fff c=ggg