CSVファイルで条件付きの特定の行を計算して削除する方法は?

CSVファイルで条件付きの特定の行を計算して削除する方法は?

次のCSVファイルがあります。

id,country
12343,China
23455,Japan
47,Singapore
374,Australia
6572e,United Kingdom
  • まず、列IDの長さが3より大きい行の総数を計算したいと思います。
  • 次に、IDの長さが5ではなく、IDにアルファベット文字を含む行を削除したいと思います。
  • 最後に、結果を保存する新しいファイルを作成したいと思います。

awkメソッドを試しましたが、次のような結果が得られました。

mylaptop@MacBook-Pro ~ % awk 'length($1)!=19 {c++} END {print c+0}' myfile
quote> 

次のコマンドを入力すると:

mylaptop@MacBook-Pro ~ % awk 'length($1)!=19 {c++} END {print c+0}' <myfile>

以下が表示されます。

zsh: parse error near `\n'

予想される出力はMac端末に似ている必要があります。

mylaptop@MacBook-Pro ~ % awk 'length($1)!=19 {c++} END {print c+0}' myfile
4

ファイルのすべての変更を保存します。

私はLinuxを初めて使用するために3つの質問の完全なコマンドを表示できますか?

ベストアンサー1

これは宿題だと思います!

列 1 の長さが 3 より大きい行数を計算します。

awk 'length($1)>3 {c++} END {print c+0}'

最初の列の長さが5以外の行を削除します。

awk 'length($1)==5'

列 1 の長さが 5 ではなく、数字以外の行を削除します。

awk 'length($1)==5 && $1 !~ /[^0-9]/'

シェルを使用して出力を新しいファイルとして指定します。

編集:ファイルは元のタブ区切りファイルとして表示され、現在はCSVで編集されています。これは解決策が必要であることを意味します。

awk -F, 'length($1)>3 {c++} END {print c+0}'
awk -F, 'length($1)==5'
awk -F, 'length($1)==5 && $1 !~ /[^0-9]/'

おすすめ記事