[解決済み】bashから "group by "をシミュレートする最良の方法とは?
2022-05-02 05:23:53
質問
IPアドレスを1行に1つずつ記載したファイルがあるとします。
10.0.10.1
10.0.10.1
10.0.10.3
10.0.10.2
10.0.10.1
各IPアドレスがファイルに何回現れるかをカウントするシェルスクリプトが必要です。前の入力に対して、次のような出力が必要です。
10.0.10.1 3
10.0.10.2 1
10.0.10.3 1
一つの方法として
cat ip_addresses |uniq |while read ip
do
echo -n $ip" "
grep -c $ip ip_addresses
done
しかし、これでは効率的とはとても言えません。
bashを使ってより効率的にこの問題を解決するにはどうしたらよいでしょうか?
(一つ付け加えると、perlやawkから解決できることは知っていますが、私はそれらの言語ではなく、bashでのより良い解決策に興味があります)。
追加情報
ソースファイルが5GBで、アルゴリズムを実行するマシンが4GBだとします。ですから、ソートは効率的な解決策ではありませんし、ファイルを何度も読み込むこともできません。
ハッシュテーブルのようなソリューションが気に入ったのですが、どなたかこのソリューションの改善点を教えてください。
追加情報その2。
なぜわざわざbashでやるのか、perlなどの方がずっと簡単ではないか、という質問もありました。その理由は、私がこの作業をする必要があったマシンでは、perlが使えなかったからです。カスタムビルドのLinuxマシンで、私が使い慣れたツールはほとんどありませんでした。そして、それは興味深い問題だったと思います。
だから、質問を責めないで、嫌なら無視してください :-)
解決方法は?
sort ip_addresses | uniq -c
これは最初にカウントを表示しますが、それ以外はあなたが望むとおりのものになるはずです。
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bash prints リテラルの改行をエコーする \n
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】if [](角括弧)の「[: 引数が多すぎる」エラーの意味)
-
[解決済み】SEDをワイルドカードで使用する場合
-
[解決済み] シェルスクリプトでブール変数を宣言して使用するにはどうすればよいですか?
-
[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
-
[解決済み] curl: 引数リストが長すぎる
-
[解決済み] systemd サービス 203/EXEC の失敗 (そのようなファイルやディレクトリがない) を修正する。
-
[解決済み] grepの出力に含まれる重複を削除する
-
[解決済み] シンプルなAsciiテーブルをCSVに変換する【終了】。
-
[解決済み] awkシステムコール
-
[解決済み] 絶対パスと論理パスの違い