2

良い一日。

ID ファイルのパターンに従って、Grep を使用してファイルから読み値を抽出しました。

grep -w -f idFile.txt readingFile.txt

私が得たGrepの出力は次のとおりです。

F47807  0.00    0.00    8.30
R02218  0.00    0.00    2.07
W74941  0.00    0.00    5.70
C15915  0.00    0.00    3.63
C16638  0.00    0.39    8.82
C16979  0.00    0.39    2.59

IDファイルは次のとおりです。

W74941
F47807
C15915
R02218
C16638
C16979

以下のように、GrepでIDファイルと同じパターンを出力したいと思います。

W74941  0.00    0.00    5.70
F47807  0.00    0.00    8.30
C15915  0.00    0.00    3.63
R02218  0.00    0.00    2.07
C16638  0.00    0.39    8.82
C16979  0.00    0.39    2.59

いくつかの Grep オプションを試してみましたが、必要なものを取得できませんでした。では、どうすればそれを行うことができるのか、コミュニティの方からアドバイスをいただけないでしょうか?

どうぞよろしくお願いいたします。

4

3 に答える 3

1

grep のみでこれを実行できるかどうかはわかりませんが、bash を少し使用すると、次のように実行できます。

for line in $(cat idFile.txt)
    do grep "$line" readingFile.txt
done

ただし、これは id ごとに 1 回 readingFile を処理するため、パフォーマンスが心配な場合は役に立ちません。

編集:これは、IDにスペースが含まれていないことを前提としていることに注意してください。

于 2013-05-27T19:57:06.267 に答える
1

このワンライナーは、grep 出力と idfile で動作するはずです。

awk 'NR==FNR{a[$1]=$0;next}$1 in a&&$0=a[$1]' 

完全な行:

awk 'NR==FNR{a[$1]=$0;next}$1 in a&&$0=a[$1]' <(grep -w -f idFile.txt readingFile.txt) idfile
于 2013-05-27T20:44:21.123 に答える