你的腳本做得太多了。將乾淨的解決方案,我的腦海裏,反轉條件:
awk '{ if ($2 > 25) print }'
甚至:
awk '$2 > 25'
如果你不想反轉的條件,則:
awk '{ if ($2 <= 25) next; print }'
有不需要遍歷所有的字段。
甚至沒有GNU awk
支持 '原位' 文件修改。您必須將結果寫入臨時文件,然後將臨時文件複製或移回原始文件。 (複製保存硬鏈接和權限;此舉打破了聯繫,並可以修改所有者和權限,你需要決定是否這是一個問題。)
感謝Ed Morton的指出了GNU AWK 4.x中是否有一個機構「原位」編輯文件,部分原因是因爲他競選加入。
命令行幫助不會告訴你GNU Awk 4.x支持文件的原地修改,但是如果你找到了手冊的正確部分(Extension sample: inplace-從我的角度來看這是錯誤的;不僅僅是一個示例,因爲它是一個分佈式擴展),那麼你可以發現有一個擴展使GNU Awk覆蓋了在其命令行中指定的常規文件。
gawk -i inplace '{ if ($2 > 25) print }' file1 …
甚至:
gawk -i inplace '$2 > 25' file1 …
注意,實驗表明,它是很高興來修改原位只讀文件。這與sed
(包括GNU和BSD(Mac OS X)子種)一致;他們也會在沒有警告的情況下就地修改只讀文件 - 並保留文件的權限,但會破壞任何硬鏈接。
您的腳本使用awk '…' < *
;這是忽略目錄中第一個文件的獨特方式,除非它是目錄中的唯一文件(它用於標準輸入,但如果目錄中有多個文件,標準輸入將被忽略)。您只需要使用*
,而不是< *
。
請參見:[刪除所有第1列具有特定數字條目的行](http://stackoverflow.com/questions/22697636/delete-all-lines-where-column-1-has-specific-numeric-entries)和[awk保存修改inplace](http://stackoverflow.com/questions/16529716/awk-save-modifications-inplace) – Cyrus
我強烈建議你在嘗試之前閱讀由Arnold Robbins編寫的Effective Awk編程第4版任何更多的文本操作,因爲您對awk語法看起來很困惑(例如,循環遍歷每次重複測試$ 2的所有字段)和調用(例如,試圖從文件列表中使用輸入重定向,並希望以某種方式更改awk不知道的文件中的值是否存在該重定向的禮貌)。 –