cat list.txt
1 apple 4 30 f2 potato 2 40 v3 orange 5 10 f4 grapes 10 8 f
脚本:获取列表::
if [[ "$@" == *[f]* ]] ; then
awkv1 = $(grep f | awk '{ print $2 $3 }')
else
awkv1 = $(awk '{ print $2 $4 $5 }')
fi
cat list.txt | $(awkv1)
我有一个变量 awkv1,它根据参数“f”存储值。
但它不起作用。
运行::
getlist f
不做任何事情。它应该像这样工作::
如果在参数中传递 'f' 则::
cat list.txt | grep f | awk '{ print $2 $3 }'
否则::
cat list.txt | awk '{ print $2 $4 $5 }'
最佳答案
将部分命令行存储在字符串变量中更容易出错,而不是使用 bash 数组。
你可以像这样调整你的脚本:
#!/bin/bash
# store awk command line in an array
if [[ "$*" == *f* ]]; then
awkcmd=(awk '/f/{ print $2, $3 }')
else
awkcmd=(awk '{ print $2, $4, $5 }')
fi
# execute your awk command
"${awkcmd[@]}" list.txt
关于linux - 重定向到在 bash 中存储 awk 的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35666545/