Text-Processing
刪除不超過或少於“N”個欄位的行?
我正在使用 sed、perl、awk、bash..
我有一個很大的(10GB)文本文件,它有 13 個欄位(列)的
TAB
分隔數據。不幸的是,其中一些行有 extraneousTABs
,所以我想刪除我們有 extra 的整行TABs
,因此不相等的欄位。(我不介意完全丟棄這些線條)我目前擁有的將欄位數寫入另一個文件。
awk -F'\t' '{print NF}' infile > fieldCount head fieldCount 13 13 10 13 13 13 14 13 13 13
我想建構一個簡短的腳本,刪除任何(從原始文件中)多於(或少於)13 個正確欄位的行。
- 速度很有幫助,因為我必須對多個文件執行此操作
- 一口氣完成會很酷
- 我目前正在將 fieldCount 文件移植到 Python 中,嘗試逐行載入。
編輯:
有效(13 列)
a b c d e f g h i j k l m
無效(14 列)
a b c d e f g h i j k l m n
你幾乎已經擁有它:
awk -F'\t' 'NF==13 {print}' *infile* > *newfile*
而且,如果您使用的是通過擊鍵(:))收費的系統之一,您可以將其縮短為
awk -F'\t' 'NF==13' *infile* > *newfile*
要在一次掃描中執行多個文件,並實際更改文件(而不僅僅是創建新文件),請辨識未使用的文件名(例如,
scharf
),然後執行循環,如下所示:對於*列表中的 f* 做 awk -F'\t' 'NF==13 {print}' "$f" > scharf && mv -f -- scharf "$f" 完畢
*
list
*可以是一個或多個文件名和/或萬用字元文件名擴展模式;例如,對於 f in blue.data green.data *.dat orange.data red.data /ultra/violet.dat
該命令用臨時文件(僅包含輸入文件中的行和 13 個欄位)
mv
覆蓋輸入文件(例如, )。(確保這是您想要做的,並且要小心。為了安全起見,您可能應該先備份您的數據。)即使輸入文件已經存在,也要覆蓋輸入文件。如果您的任何文件的名稱以.blue.data``scharf``-f``mv``--``-