「N」個のフィールドより多い行ま​​たは少ない行を削除しますか?

「N」個のフィールドより多い行ま​​たは少ない行を削除しますか?

私はsed、Perl、awk、bashを使ってMacで作業しています。

TAB13の区切りデータフィールド(列)を含む大容量(10 GB)のテキストファイルがあります。残念ながら、その代謝のいくつかはそれとは何の関係もないのでTABs試してみました。重複した行全体を削除する TABsよって、不平等領域が生成される。 (この行を完全に捨てても大丈夫です)

私が現在持っているのは、フィールド数を別のファイルに書き込みます。

awk -F'\t' '{print NF}' infile  > fieldCount

head fieldCount
13
13
10
13
13
13
14
13
13
13

13個より多いまたは少ない正しいフィールドを持つすべての行(元のファイルから)を削除する短いスクリプトを作成したいと思います。

  1. 複数のファイルで行う必要があるため、速度が役立ちます
  2. 一度にすればいいと思います。
  3. 現在のfieldCountファイルをPythonに移植し、1行ずつロードしようとしています。

編集する:

有効(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

ベストアンサー1

あなたはほとんどそれを持っています:

awk -F'\t' 'NF==13 {印刷}'ネペレ  >新しいファイル

そして、キー入力(:)で充電されるシステムの1つを使用している場合は、次のように短縮できます。

awk -F'\t' 'NF==13'ネペレ  >新しいファイル

一度に複数のファイルをスキャンして実際にファイルを変更するには(新しいファイルを作成するのではなく)、未使用のファイル名(たとえばscharf)を識別してから、次のループを実行します。

fの場合リスト
する
    awk -F'\t' 'NF==13 {print}' "$f" > scharf && mv -f -- scharf "$f"
完璧

これlist1つ以上のファイル名および/またはワイルドカードファイル名拡張パターンです。

blue.data green.data *.dat Orange.data red.data /ultra/violet.datのfについて

mvこのコマンドは、入力ファイル(たとえば)を入力ファイルの13フィールド行のみを含む一時ファイルで上書きします。 (これが必要なものであることを確認してください。安全のために最初にデータをバックアップする必要があります。)入力ファイルがすでに存在していても上書きするように指示します。ファイル名が 。blue.datascharf-fmv---

おすすめ記事