Linux上のdiffファイル間のデータ処理

Linux上のdiffファイル間のデータ処理

2つのログファイル名がありますAttendancePosition現在いるすべての兵士の位置を知りたいです(はい)。これら2つのファイルの間でこれをどのように実行できますか?

出席ファイル

ここに画像の説明を入力してください。

場所ファイル

ここに画像の説明を入力してください。

grep兵士の現在の名前を取得するためにそれを使用しようとしました。しかし、他のファイルから場所をどのように取得できますか?

答え1

あなたの直感が正しいです。grepまずはい属性を持つすべての戦士です。次に、を使用して名前を抽出し、awkそれを配列またはセカンダリに埋めますgrep。名前を抽出することはあまり複雑ではありません(ファイル名がAttendanceであると仮定)。

<Attendance grep 'Yes' | awk '{print $2}'

これで、結果セットのサイズによって異なります。検索する名前が50未満の場合は、結果を場所ファイルの次のgrepに引数として渡すことができます。シェルがサポートするよりも多くのコマンドライン引数がある場合は、小さな(Bash-)スクリプトを作成します。名前ブロックを配列に入れ、すべての行を繰り返して一致するものを見つけます。

10,000を超えるログエントリの場合は、次のようにチャンクで実行します(他のコメントもBashスクリプトファイルに統合します)。

#!/bin/bash

declare -A position

# build up a hash table through preformatted Bash-statements
while read i; do
    eval "$i"
done < <(awk '{print "position['\''"$2"'\'']='\''"$3"'\''"}' Position)

echo "read ${#position[@]} positions"

# Lookup positions from the hash table
while read name; do
    pos="${position[$name]}"
    if [ -z "$pos" ]; then
        pos="-"
    fi
    echo "$name $pos"
done < <(awk '/YES/ { print $2 }' Attendance)

姓名、役職、役職などを区切るなど、名前にスペースが含まれていると正しく機能しません。より多くの属性と一種の距離と時間の近似が必要なので、すべての兵士がタイムスタンプが指定された正確な位置を持っているわけではありません。開発者に費用を支払うことをお勧めします。

ハッシュテーブルのキープロパティを拡張することもできます。場所後でアイテムを保存して検索します。

答え2

あなたはそれを使用することができますdiffLinuxで2つのファイルを比較するコマンドです。あなたの説明によると、これはあなたの要件を満たす必要があります。

diff -y Attendance Position | grep YES > newfile

これにより、2つのファイルが並んで表示され、YESという行だけが表示され、出力が次に送信されます。新しいファイル

答え3

また試み

grep YES file1 | cut -f2 -d" " | grep -f- file2

関連情報