2015-12-30 153 views
0
#!/usr/bin/nawk -f 

# Before lines are processed 
BEGIN { 

print "Awk Started" >> FILE_STDOUT 

# Variables 
rec1="" 
rec2="" 
rec3="" 
rec4="" 
mod=0 
X=23 

} 

NR % 5 != 0 { 
mod=NR%5 
if (mod==1) 
    rec1=$0 
else 
if (mod=2)  
    rec2=$0 
else 
if (mod=3) 
    rec3=$0 
else 
if (mod=4) 
    rec4=$0 

next 
} 

# NR % 5 == 0 
{ 

    if (substr($rec1,9,2)==X || substr($rec2,9,2)==X || substr($rec3,9,2)==X || substr($rec4,9,2)==X) 
{ 
    print rec1 
    print rec2 
    print rec3 
    print rec4 
} 
} 

END { 

    print "Awk Ended" >> FILE_STDOUT 

} 

在運行這應該檢查的4塊爲一個特定的進入和輸出它們上面的腳本,我得到這個錯誤:AWK - 無法打開文件錯誤

AWK:無法打開「」 (沒有這樣的文件或目錄)

是什麼原因?

樣品輸入:

1010102
    101010201AA1000 
    101010201AA1000 
    101010201AA1000 
    303030401AA1000 
00 
    303030401AA1000 
    303030401AA1000 
    505050601AA1000 
    505050601AA1000 
    505050601431000 
    505050601AA1000 
    707070801AA1000 
    707070801AA1000 
    707070801AA1000 
    707070801561000 

示例輸出:

1010102
101010201AA1000 
101010201AA1000 
101010201AA1000 

我正在給定的錯誤是:

NAWK:節目超過極限:字段的最大數目的大小= 32767 FILENAME =「awktestor.txt」FNR = 1 NR = 1

+0

這也將是有趣的,知道什麼是這一計劃的最終目標,因爲我們也許能夠找到一個更直接的方法。 – fedorqui

回答

1

當你說:

print "Awk Started" >> FILE_STDOUT 

要重定向的print輸出到文件,其值存儲在變量FILE_STDOUT。但是,如果未設置此變量,則awk無法重定向並失敗。

這是因爲如果你會說:

awk 'BEGIN {print 1>>FILE_STDOUT}' 

它返回

AWK:CMD。行:1:致命的:表達式`>>」重新定向空 字符串值


而且,它似乎是要匹配行時23在第10和第11字符被發現。然後,將該行與以下3行一起打印出來。

對於您可以說:

awk '$1 ~ /^.{9}23/ {c=4} c&&c--' file 
    1010102
    101010201AA1000 
    101010201AA1000 
    101010201AA1000 
+0

謝謝,我在測試過程中將其刪除,但後來我得到了這個: nawk:超出程序限制:最大字段數大小= 32767 FILENAME =「awktestor.txt」FNR = 5 NR = 5 ------ On 100行文件,這似乎不正常。 – onlyf

+0

@onlyf這是一個全新的問題。當你在一行中有很多字段時,就會發生這種情況。更新你的awk版本怎麼樣?你在做什麼系統? – fedorqui

+0

該行實際上有一個字段,我會用一些例子編輯一個時刻 – onlyf

相關問題