【问题标题】:Arguments to change variable values in Bash script在 Bash 脚本中更改变量值的参数
【发布时间】:2016-10-13 19:28:36
【问题描述】:

我在 bash 中有这个脚本:

#!/bin/bash
dir="/home/dortiz/Prueba"
for i in $dir/*
do
cat $i | awk '{print $1"  " $2"    " $3"    " $4"\n " $5}' | \
         awk '/gi/{print ">" $0; getline; print}' | \
         awk '$3>20.00 {print $0; getline; print;}' \
         >  "${i}.outsel"
done         
cd /home/dortiz/Prueba
mv *.outsel /home/dortiz/Prueba2

我想设置一个参数以从调用此脚本的主程序中以一种简单的方式更改 ""awk '$3>"" 之后的值。

我读过一些关于 getopts 的文章,但我完全不理解

提前非常感谢

【问题讨论】:

  • 通常不需要通过管道将 awk 传递给 awk:awk | awk | awk。您可以使用-v var=xxx 设置变量:awk -v my_var=1234 'BEGIN {print my_var}'

标签: bash variables arguments getopts


【解决方案1】:

最简单的方法是向脚本传递一个参数:

yourscript.sh 20.0

然后在你的脚本中

#!/bin/bash
value=$1    # store the value passed in as the first parameter.
dir="/home/dortiz/Prueba"
for i in $dir/*; do
    awk '{print $1"  " $2"    " $3"    " $4"\n " $5}' "$i" |
    awk '/gi/{print ">" $0; getline; print}' | 
    awk -v val="$value" '$3>val {print $0; getline; print;}' >  "${i}.outsel"
    #   ^^^^^^^^^^^^^^^
done
...

cat|awk|awk|awk 管道大概可以这样写:

awk -v val="$value" '
    $3 > val {
        prefix = /gi/ ? ">" : ""
        print prefix $1 "  " $2"    " $3"    " $4"\n " $5
    }
' "$i" > "$i.outsel"

【讨论】:

  • 非常感谢!最后,我了解了如何自己使用 getopts,我认为这是一个更好的选择,因为我将来必须添加更多参数,并且可能更实用。
  • 我不知道awk中管道的事情,谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2015-02-04
  • 2017-04-03
  • 2018-01-20
相关资源
最近更新 更多