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

Linux 使用shell脚本将文本文件提取到变量,linux,shell,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}” 但是不起作用。请给我一

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

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}”

但是不起作用。请给我一些建议。谢谢

试试这个:

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)

获取这些变量的最简单方法是使用BASH数组和read bulletin:

> read -a arr< <(IFS=':' && grep "aaa" file)
> printf "%s\n" "${arr[@]}"
aaa
bbb
ccc
>read-a arr
如果要使用位置参数,可以使用子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