我有一个第三栏是
的文件ifile.txt
2
1
4
3
5
我需要在循环中以一对一的关系分配这些值。即
for i in 20 45 50 68 90; do
if [ $i == 20 ]; then j=$(awk 'NR==1 {print $3}' ifile.txt)
if [ $i == 45 ]; then j=$(awk 'NR==2 {print $3}' ifile.txt)
if [ $i == 50 ]; then j=$(awk 'NR==3 {print $3}' ifile.txt)
if [ $i == 68 ]; then j=$(awk 'NR==4 {print $3}' ifile.txt)
if [ $i == 90 ]; then j=$(awk 'NR==5 {print $3}' ifile.txt)
fi
任何人都可以建议我采用更简单的方法。
答案 0 :(得分:4)
我有时会使用这样的技术:
for code in 20/1 45/2 50/3 68/4 90/5
do
i=${code%/*}
j=$(awk -v line=${code#*/} 'NR == line { print $3 }' ifile.txt)
# …use $i and $j…
echo "i = $i, j = $j"
done
这适用于不稳定的订单或间隙等。在这种情况下,if
代码的索引从1到5,因此数组也可以工作:
array=('' 20 45 50 68 90) # Indexing from zero
for line in $(seq 1 $((${#array[@]}-1)) )
do
i=${array[$line]}
j=$(awk -v line=$line 'NR == line { print $3 }' ifile.txt)
# …use $i and $j…
echo "i = $i, j = $j"
done
给定数据文件ifile.txt
:
A B 2
A B 1
A B 4
A B 3
A B 5
显示的两个脚本都产生:
i = 20, j = 2
i = 45, j = 1
i = 50, j = 4
i = 68, j = 3
i = 90, j = 5