ログファイルが複数あり、「固有ID」を含む特定の行の発生回数を計算する必要があります。
したがって、ログ行は次のようになります。
<Some_ID> is related to <Unique_ID>
上記の値はログで複数回繰り返すことができます。
複数のファイルで、上記のログ行(別のIDを使用)の一意の発生回数を計算するコマンドを見つける必要があります。
答え1
このコマンドは、一意のIDの前のすべてのテキストを削除し、一意のIDの発生数を計算し、発生順序に従ってソートされたリストを生成します。
cat log1 log2 ... logN | sed 's/^.* is related to //' | sort | uniq -c | sort -n
答え2
「Some_ID」と「Unique_ID」の間のテキストが実際に定数の場合は、次のようになります(タイムスタンプなしなど)。
cat log1 log2 ... | grep "Some_ID" | sort | uniq -c | sort -n
答え3
私が正しく理解したら、IDを取得したい場合は、これを行い、それをsed
andのwhileループに挿入できます。grep
wc
cat files | sed -e 's/.*is related to //g' \
| while IFS= read -r ID; do
count=`grep $ID files | wc -l`
echo "$ID = $count"
done
答え4
あなたの質問とコメントの説明を通してあなたの質問を理解する方法は、あなたが一意の関係の数を探しているということです。したがって、次のようにファイルが与えられた場合:
345 is related to 123
678 is related to 123
187 is related to 732
678 is related to 123
結果は3でなければなりません。このために、、、およびsort
パイプ演算子が役に立ちます。uniq
cat
wc
検索したいすべてのファイルがフォルダにある場合は、単に使用できます*
(ワイルドカード演算子)各ファイルを検索します。たとえば、cat *
現在のディレクトリにあるすべてのファイルの内容を印刷します。複数のファイルを一覧表示して指定することもできます。印刷しcat file1.txt file2.txt
ますfile1
。file2
特定のサブディレクトリにファイルを割り当てるためにワイルドカードと一緒に使用できます(cat dir1/* dir3/*
スキップdir2/
)。部分ファイル名を指定することもできます。cat file*
一致file1
がfile123
一致しませんafile
。
上記を使用すると、以下を含めることができます。どのインポートするファイルですsort
。パイプ演算子(|
)は、あるコマンドの出力を取得し、別のコマンドの入力にパイプします。cat file1 | sort
内容がソートされますfile1
。その後、それらをパイプしてuniq
重複項目をフィルタリングし、wc
次を使用して行数を計算できますcat file1 | sort | uniq | wc -l
。
上記のサンプルファイルを使用すると、このsort
コマンドは出力を次のように変更します。
187 is related to 732
345 is related to 123
678 is related to 123
678 is related to 123
uniq
重複したアイテム(この例の下部)は削除されます。
187 is related to 732
345 is related to 123
678 is related to 123
wc -l
行数を計算して返します3
。
メモ:これは重要です 123 is related to 321
そして 321 is related to 123
〜のように二つ別の関係。この問題を解決するには、入力データを解析し、項目をテーブルまたはハッシュマップに整理するなど、より複雑な作業を実行する必要があります。
また、非常に大きな入力の場合は、コマンドチェーンが中断され停止したように見えることがあります。多くの入力データで作業している場合は、データを管理するためにデータベースを設定することをお勧めします。これは、クエリを使用してこの種の検索をより迅速に実行できるためです。