2013-08-03 133 views
0

我們執行了下面的命令並得到一些錯誤。命令在unix中拋出錯誤

k="";while read r;do [ "$k" != "" ] ="$k|";k="$k^$r\$";done<1;awk -v "KEY=$k" -v "CB=CB" -v "CSA=CSA" "BEGIN{FS=\"|\";OFS=\"|\"}{if (\$2 ~ KEY){print \$0>CB}else{print \$0>CSA}}" abc 

錯誤:

bash: line 1: [: missing `]' 

請幫我在這。

謝謝

回答

0

爲什麼一條線?寫了三立,你的代碼是:

k="" 
while read r 
do 
    [ "$k" != "" ] ="$k|" 
    k="$k^$r\$" 
done <1 

awk -v "KEY=$k" -v "CB=CB" -v "CSA=CSA" \ 
    'BEGIN{FS="|";OFS="|"}{if ($2 ~ KEY){print $0>CB}else{print $0>CSA}}' abc 

的問題是與test命令:

[ "$k" != "" ] ="$k|" 

的最後一個參數的命令是="$k|",但[需要的最後一個參數是]

awk程序通過在程序中使用單引號進行簡化 - 您不再需要任何反斜槓。

<1重定向也有點奇怪;它從名爲1的文件讀取。

+0

謝謝Jonathan Leffler ...可以請你糾正命令,因爲我沒有準確理解你的觀點.. – vishal

+0

@vishal,你能解釋你想用'[「$ k」!=「」]做什麼嗎? =「$ k |」'? –

+0

既然它是非常非常清楚你想要做什麼,我不能幫你。也許你已經記住了條件行的'[「$ k」!=「」] && k =「$ k |」';這會在字符串後添加一個管道'|',如果它不是空的,在添加脫字符'^',讀取的行和$''美元。但不清楚你在追求什麼;這是很多分隔符。 –