ヘッダー出力を持つ特定のフィールドに浮動小数点値が表示されないCSVファイルレコードのフィルタリング

ヘッダー出力を持つ特定のフィールドに浮動小数点値が表示されないCSVファイルレコードのフィルタリング

フィールドに浮動小数点値を含むCSVファイルのレコードをフィルタリングし、postal_codeヘッダーも出力に含めたいと思います。

サンプルCSVファイルは次のとおりです。

> ca  test.csv
employee_id|postal_code
1|56024.4 
1|752066

予想される出力は次のとおりです。

employee_id|postal_code
1|752066

私が試したこと:

> awk '$2 != "." {print $0} ' test.csv
1|56024.4
1|752066

ベストアンサー1

コマンドは、awkスペースで区切られた2番目のフィールドがドットかどうかをテストします。 2番目のスペースで区切られたフィールドがないため、ファイルのすべての内容を出力します。


使用ミラーmlr()は、ドットを含むフィールド(ヘッダーなど)の出力からレコードをフィルタリングします。postal_codeca

$ mlr --csv --fs pipe filter -S '$postal_code !=~ "[.]"' file
employee_id|postal_code
1|752066

フィールド値を正規表現(で置換可能)と一致させてフィールド$postal_code !=~ "[.]"値をテストし、テストが成功した場合にレコードを削除するフィルタ式。postal_code[.]\.

この操作-Sのオプションはfilterフィールドの型推論をオフにするため、データはまだ浮動小数点ではない文字列です。

フィルタ式を使用して、フィールドに数字のみを含むレコードを$postal_code =~ "^[[:digit:]]+$"許可することもできます。postal_code特定の桁数(たとえば)を要求することで、これをより厳密にすることができます$postal_code =~ "^[[:digit:]]{6}$"

おすすめ記事