[英]How to redirect records to different output files based on a value in one of the columns in a file using nawk/awk?
[英]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.