簡體   English   中英

來自awk和nawk的不同結果

[英]Different results from awk and nawk

我剛剛在一個有大約2.5億條記錄的文件上運行這兩個命令。

awk '{if(substr($0,472,1)=="9") print $0}' < file1.txt >> file2.txt

nawk '{if(substr($0,472,1)=="9") print $0}' < file1.txt >> file2.txt

記錄長度為482.第一個命令在file2.txt中給出了正確的記錄數,即; 6000萬,但nawk命令只提供420萬。

我很困惑,想知道是否有人遇到過這樣的問題。 這個簡單的命令究竟是如何在內部以不同的方式處理的? 有一個緩沖區在使用nawk時只能容納一定數量的字節嗎?

如果有人可以對此有所了解,我將不勝感激。

我的OS詳細信息是

SunOS <hostname> 5.10 Generic_147148-26 i86pc i386 i86pc

差異可能取決於Nawk的緩沖限制。 輸入文件中找到的記錄(行)之一可能超出了它。

這個關鍵的行可以在awk.h中找到:

#define RECSIZE (8 * 1024)  /* sets limit on records, fields, etc., etc. */

您的命令可以簡化為:

awk 'substr($0,472,1)==9'

在Solaris上(你所在的)默認運行awk時你運行的是舊的,破壞的awk(/ usr / bin / awk)所以我懷疑nawk是產生正確結果的那個。

使用相同的腳本/參數運行/ usr / xpg4 / bin / awk,並查看其輸出中您同意的其他結果。

另外,檢查輸入文件是否是在Windows上通過運行dos2unix創建的,並查看其大小是否更改,如果是,請在修改后的文件上重新運行awk命令。 如果它是在Windows上創建的,那么它將有一些控件-Ms那里可能導致混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM