2015-04-01 170 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