2015-04-01 138 views
0

我有这个代码的问题..我无法弄清楚我必须写作条件来削减我的文件与awk。Bash脚本Awk条件

i=0  
while [ $i -lt 10 ]; #da 1 a 9, Ap1..Ap9 
    do 

     case $i in 
     1) RX="54:75:D0:3F:1E:F0";; 
     2) RX="54:75:D0:3F:4D:00";; 
     3) RX="54:75:D0:3F:51:50";; 
     4) RX="54:75:D0:3F:53:60";; 
     5) RX="54:75:D0:3F:56:10";; 
     6) RX="54:75:D0:3F:56:E0";; 
     7) RX="54:75:D0:3F:5A:B0";; 
     8) RX="54:75:D0:3F:5F:90";; 
     9) RX="D0:D0:FD:68:BC:70";; 
     *) echo "Numero invalido!";; 
     esac 
     echo "RX = $RX" #check 
     awk -F, '$2 =="$RX" { print $0 }' File1 > File2[$i] #this is the line! 
    i=$(($i + 1)) 
    done 
正确

的echo命令输出,但是当我在AWK使用相同的“$ RX”的条件它不工作(它打印空白页)。 我的文件1:

1417164082794,54:75:D0:3F:53:60,54:75:D0:3F:1E:F0,-75,2400,6 1417164082794,54:75:D0:3F :56:10,54:75:D0:3F:1E:F0,-93,2400,4 1417164082794,54:75:D0:3F:56:E0,54:75:D0:3F:1E:F0, -89,2400,4 1417164082794,54:75:D0:3F:5A:B0,54:75:D0:3F:1E:F0,-80,2400,4 1417164082794,54:75:D0:3F: 53:60,54:75:D0:3F:1E:F0,-89,5000,2

你能告诉我正确的表达过 “awk -F ...”

非常感谢你!

+1

变量不会在单引号内扩展。 – Biffen 2015-04-01 10:40:11

+0

awk中的变量与bash中的变量不同 – Neo1989 2015-04-01 10:41:16

+0

'$ 2 ==''“$ RX”'“{print $ 0}' – anishsane 2015-04-01 10:46:16

回答

0

@Ricky - 你写在壳循环任何时候只处理文本你有错误的做法。这并不是shell创建的目的 - 这是awk创建的目的,shell创建的目的是调用像awk这样的命令。

只需使用一个单一的awk命令和替代阅读File 10倍和变量的文件的每一行开关,就去做全部一次,这样的事情:

BEGIN { 
    split(file2s,f2s) 
    split("54:75:D0:3F:1E:F0\ 
      54:75:D0:3F:4D:00\ 
      54:75:D0:3F:51:50\ 
      54:75:D0:3F:53:60\ 
      54:75:D0:3F:56:10\ 
      54:75:D0:3F:56:E0\ 
      54:75:D0:3F:5A:B0\ 
      54:75:D0:3F:5F:90\ 
      D0:D0:FD:68:BC:70", rxs) 
    for (i in rxs) { 
     rx2file2s[rxs[i]] = f2s[i] 
    } 
} 
{ 
    if ($2 in rx2file2s) { 
     print > rx2file2s[$2] 
    } 
    else { 
     print NR, $2, "Numero invalido!" | "cat>&2" 
    } 
} 

,你会再调用为awk -v file2s="${File2[@]}" -f script.awk File1

我说“类似”,因为您没有提供任何示例输入(File1内容)或预期输出(File2 *值和内容),所以我无法测试它,但它会非常接近如果不完全正确,你需要什么。

3

要通过从shell变量到awk中使用-v:

awk -F, -v R="$RX" '$2 ==R { print $0 }' File1 > File2[$i] 
+1

并删除'{print $ 0}',因为这是默认行为,所以没有必要明确指定它。 – 2015-04-01 15:25:54