2010-09-01 79 views
2

我試圖在腳本中處理10個與awk的文件,並且出現以下錯誤。處理多個文件時出錯

$ sh skipper.sh file1 filea fileb filec filec fileb filea fileb filec fileb awk: cmd. line:2: (FILENAME=filec FNR=7) fatal: cannot open file `file10' for reading (No such file or directory) 

是否有人知道如何解決它?它與< 10個文件正常工作,但我需要使用它10或50個文件。

這裏是我的代碼

awk -v nfiles="10" 'NR==FNR{a[$0]++;next} 
$0 in a {a[$0]++; next} 
{b[$0]++} 
END{ 
    for(i in a){ 
    if(a[i]==nfiles) { 
     print i > "output1" 
    } 
    else if(a[i]==1) { 
     print i > "output3" 
    } 
    } 
    for(i in b){ 
    if(b[i]==nfiles-1) { 
     print i > "output2" 
    } 
    } 
}' $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 
+3

這不是一個awk問題。這是一個殼問題。 $ 10是第一個參數,在它不是腳本的第10個參數之後,它是0。我建議爲你使用的shell添加一個標籤。你的shell可能有一些重複整個命令行而不是一個參數。 – bbadour 2010-09-01 00:20:55

+4

您應該使用'「$ @」',而不是列出所有這些位置參數'$ 1 $ 2 ...'。 – Cascabel 2010-09-01 00:24:03

回答

5

當你打的說法10及以上時,應使用大括號,例如

${10} 
1

隨着你的代碼稍加修改就可以使用任意數量的文件,你需要

awk 'BEGIN{nfiles=ARGC-1} 
... 
} "[email protected]" 

這樣您可以輸入任意數量的文件到您的awk腳本。它也會處理空文件。如果你想跳過空文件你可以使用這個:

awk 'FNR==1{++nfiles} 
... 
} "[email protected]"