2016-04-19 94 views
1

我有我的腳本,它獲得了選定文件的3列的最大值。如果文件是純粹的,它的效果很好,但如果我嘗試用tail + 2管道文件,它只是不工作了。有代碼:awk腳本在純文件上工作,但不用tail + 2工作

BEGIN {max1 = 0; max2 = 0; max3 = 0} 
{ 
if(max1 < $1) 
max1 = $1 
if(max2 < $2) 
max2 = $2 
if(max3 < $3) 
max3 = $3 
} 
END {print max1, max2, max3;} 

我執行這樣的代碼:AWK -f [codefilename] [的TargetFile]

工程100%好

我執行這樣的代碼(希望刪除第一行之前計數):

awk -f [codefilename] [targetfile] |尾+2

它失敗

謝謝你的幫助和時間。

+2

我想你想要:'tail +2 targetfile | awk -f codefilename' – andlrc

+0

謝謝你的工作!我仍然很綠:D –

+0

如果你習慣把文件名放在最後,你可以這樣做'awk ... <(tail +2 file)' – karakfa

回答

1

考慮您的示例:

所有你需要 tail+2之間的空間
awk -f codefilename targetfile | tail+2 

第一。其次正在發生的事情是,從awk命令的輸出通過管道輸送到尾所以它基本上是這樣寫:

awk -f codefilename targetfile > tmp1 
tail +2 tmp1 

我猜你要的是採取一切,但是第一行從targetfile和運行AWK代碼它,如果是這樣的話,你需要:

tail +2 targetfile | awk -f codefilename 

AFAIK tail +N不是所有發行版的支持,你需要這樣的東西,而不是sed -n '2,$p'。如果有人可以澄清,請做。

+0

即時通訊使用SunOS 5.11,因此它支持+ N就好了:D。再次感謝您的信息。 頁面是尾部和+2之間的空格是語法錯誤,我的錯誤。 –

+0

當然你根本不需要'tail + 2',awk完全可以跳過這些行:'NR> 1 {... code ...}'。 @PauliusMickus btw你最大的計算通常是錯誤的 - 種子讀取的第一個值,不要以爲會有一個大於零的值。 –

+0

@Ed Mordon ty ill不要忘記,這隻適用於正數。 –

相關問題