タブ区切りのファイルから欠落している値を含む行を削除する

タブ区切りのファイルから欠落している値を含む行を削除する

ダウンストリームプログラムで処理するタブ区切りの大容量(〜900 MB)テキストファイルがあります。値が欠落している行を削除する必要があります。各行には正しい数の列があります(したがって、欠落している値は2つのタブに対応します)。

注:私の実際のデータには約200万行と80〜300列があります。可能な文字には、az AZ 0-9 -(ハイフン)_(アンダースコア)とタブ(区切り)が含まれます。ファイルにはスペースや特殊文字はありません。

私はこの種のスクリプトに初めて触れたので、提供されたコードの説明をいただきありがとうございます。私は通常Rを使用していますが、私のファイルサイズはRのデータ操作機能を超えました。

端末(またはシェルスクリプト)から欠落している値(usingなど)を含むファイルの行を削除するにはどうすればよいですかsed

入力ファイルの例:

Col1    Col2    Col3
A        B        C
D                 F
G        H        I
J        K        

出力ファイルの例:

Col1    Col2    Col3
A        B        C
G        H        I 

ベストアンサー1

そしてawk

awk -F"\t" '$1!=""&&$2!=""&&$3!=""' file

実際にははいとても簡単です。

  • awk\tフラグで指定されたフィールド区切り文字タブで入力を分割します-F。コンテンツフィールドにスペースがない場合でも、このオプションを省略できます。
  • $1!=""&&...条件です。この条件が true の場合は、awkその行を印刷します。を書くこともできますが、'$1!=""&&$2!=""&&$3!=""{print}'必須ではありません。何もしない場合、awksのデフォルトの動作はその行を印刷することです。ここで、fields$1とall$2$3空でない場合、つまり最初の3つのフィールドに値がある場合、条件はtrueです。

別のファイルに書き込むには、次のコマンドを使用します。

awk -F"\t" '$1!=""&&$2!=""&&$3!=""' input_file >output_file

編集するawk:未定義の列数の場合は、行のすべてのフィールドを確認するためにこのコマンドを使用できます。

awk -F"\t" '{for(i=1;i<=NF;i++){if($i==""){next}}}1' file

おすすめ記事