2011-09-16 7 views
1

を検索して、誰もが、私はタブ区切り値を含むファイルを持っているどの分野で26個のタブ用

を助けることができ、レコードごとに26個のタブがあるはずですが、いくつかは、より多くの私は、ファイルの外にあるもののレコードをコピーする必要があり私は、ファイルを摂取できるように、行ごとに26を持っている

何か

cat infile |grep "/t"*<26 times> >outfile などのおかげ

行うマット

答えて

2

grepで可能かもしれませんが、awkはそのような作業のために設計されています。

awk 'BEGIN{FS="\t"}; {if (NF == 26) print $0}' infile > outfile 

awkはFS = FieldSeperator、変数に建てられた多数を持っている、あなたはここで任意の値にそれを設定することができますが、「\ t」はタブ文字を表すC言語のような一定値です。 '|' (パイプ)チャーも人気があります。

BEGIN { ... code ... }は、処理が実行される前に実行されるコードブロックです。 最後のビットは、非BEGINブロック内のコードです。すなわち、{ if (NF ... }は、読み込まれる各行に対して実行されるアクションです。

NF =フィールド数。したがって、ファイルのフィールド数で簡単にフィルタリングできます。

NR =レコード数(of)。

はまたすなわちgrepを、両方utiltitesは、コマンドラインに渡されるすべてのファイルを読み、grepまたはawkため、cat file | ...を使用する必要がないことに注意してください.... FILE1 FILE2 ... filen

私はこれが役立つことを願っています

P.S.あなたが新しいユーザーのように見えるように、あなたがそれを受け入れられたものとして覚えておいてください、そして/または役に立つ答えとして+(または - )を付けるのを助ける答えを得たら。単に

+0

鮮やか、説明のためにありがとう – matttm123

2

はこれを試してみてください:

grep '^\([^\t]*\t\){26}[^\t]*$' 

何それがないことは、おそらく非タブのもので区切って26個のタブを持つ行を見つけることです。 のgrepのバージョンによっては、試してみる必要があるかもしれません:

はgrepの-P '^([^ \ tの] T \ ){26} [^ \ t]を $'

が取得するために完全なperl正規表現のサポート

1

awk 'NF==26' infile > outfile 

タブはデフォルトのものであるとして、FSを指定する必要はありませんが、必要はawkのデフォルトのアクションとしてアクションを指定しない場合は、一致するレコードを印刷することです。

関連する問題