我在文本文件中有一组数据。
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}'
但不起作用。请指教。谢谢!
答案 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