次の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]/'
答え2
カンマ区切りの最初のフィールドが3文字を超える行数を計算するには、タイトルと最初のフィールドの長さが4文字以外の行を削除してから、残りの行数を計算します。
sed -e '1d' -e '/^[^,]\{4,\},/!d' file | wc -l
このd
コマンドは、古いアドレス(行番号または正規表現)でアドレス指定された行を削除します。上記の条件が満たされない場合、 !d
削除が開始されます。
この式は、^[^,]\{4,\},
行の先頭でカンマではなく4つ以上のコンマと一致します。
ヘッダーを保持し、結果を新しいファイルに保存しながら、最初のフィールドの長さが正確に5桁ではないすべての行を削除します。
sed -e '1b' -e '/^[[:digit:]]\{5\},/!d' file >newfile
このb
コマンドを使用して、最初の入力行のスクリプトの最後に分岐し、次のループにジャンプします。これにより、ヘッダー行は削除されずに印刷されます。
この式は、^[[:digit:]]\{5\},
行の先頭の正確に5桁の数字の後にカンマが続くものと一致します。