bash - 解析文件并获取变量

时间:2014-10-12 19:45:49

标签: bash variables awk cut netapp

我在这里搜索并搜索了答案,我认为在bash中成为一个菜鸟的组合, 不知道正确的方法,而不是寻找合适的关键字意味着我无法克服最后的障碍。

我希望编写一个脚本,对我们的Netapp系统进行一些检查。我在完成2个第一个变量(VAR1& VAR2)方面遇到了一些困难...我尝试使用cut和awk命令,但我的所有尝试都没有成功。

我有一个文本文件(LUNS),它看起来像:

     #SAN1; SAN2
    abc1:abc1N
    abc2:abc2N 
    a3:a3N 
    abcde4:abcde4N

所有行都是文字和数字。

对于tom文件的每一行,我想这样做:

  • 获取VAR1中第1列的值
  • 获取第二列un VAR2
  • 的值
  • 运行并获取VAR1命令的新值VAR3(它将是LUN的大小,因此它将是一个数值)
  • 运行并获取VAR2命令的新值VAR4(与bellow相同)
  • 比较VAR3&的数值。 VAR4

我做了什么:

    cat tom |grep -v "#" |while read ligne ; do 
    VAR1=awk -F ";" '{print $1}'
    VAR2=awk -F ";" '{print $1}'
    specific command to get the numeric VAR3 & VAR4 values.
    #and run the comparaison  like : 
    if [ "$VAR3" -ne "$VAR4" ] 
    then
    echo "PROBLEM"
            if [ "$VAR4" -lt "$VAR3" ] ; then echo $VAR4; rm $VAR4; else echo "call support"; fi
    else 
    echo "Everything is OK"
    fi  

我的awk无法正常工作。 我愿意接受配置文件中的任何修改,或以我的方式获取VAR1& VAR2变量

我可以提供您的意见吗?

3 个答案:

答案 0 :(得分:0)

您应该使用

命令下属$(some command) 例如a=$(ls)

OR

引用机制

因此awk可以使用

VAR1=$(awk -F ";" '{print $1}')
VAR2=$(awk -F ";" '{print $1}')

VAR1=`awk -F ";" '{print $1}'`
VAR2=`awk -F ";" '{print $1}'`

答案 1 :(得分:0)

首先,你需要做

VAR1=$(echo $ligne|awk -F ";" '{print $1}')
VAR2=$(echo $ligne|awk -F ";" '{print $2}')

答案 2 :(得分:0)

无需使用awk

可以重写像

这样的循环
#!/bin/bash

while read line;do
    [[ "$line" =~ ^#.*$ ]] && continue
    VAR1=${line%:*}
    VAR2=${line#*:}
    echo $VAR1
    echo $VAR2
done < test