とにかくこれをUnix Shellスクリプトで取得する方法はありますか? 1列(1000行)のfileAと26列(13000行)のfileBがあります。
fileAの各値をfileBで検索し、一致する場合はFileBから26個の値をすべて返す必要があります。 (FileAからの)検索値は、FileBの26個の値のいずれかに存在する可能性があります。この値は、Bファイルのどの列でも固定されていません。
FILEA:
abc
def
ghi
FILEB:
drm|fdm|pln|ess|abc|zeh|....|yer (26 values)
fdm|drm|def|ess|yer|zeh|....|pln
ここで、fileAのabc
は5番目の列です。 FileBの場合-結果はFileBからの26の値すべてになるはずです。
同様に、fileAのdef
は3番目の列です。 FileBの-それで私の結果はFileBからの26の値すべてになるはずです。
このように、レコードセット全体に対して行う必要があります。
一致しない場合、レコードを無視します。
grep
を使用するだけです。
grep -Fwf fileA fileB
man grep
から:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty file
contains zero patterns, and therefore matches nothing. (-f is
specified by POSIX.)
-w, --Word-regexp
Select only those lines containing matches that form whole
words. The test is that the matching substring must either be
at the beginning of the line, or preceded by a non-Word
constituent character. Similarly, it must be either at the end
of the line or followed by a non-Word constituent character.
Word-constituent characters are letters, digits, and the
underscore.
FileAの順序は重要ですか?そのパターンでfileBに複数の行を含めることができますか?これにより、たとえばfileAが解析され、fileBの各パターンが検索されます。
while read i; do grep "$i" fileB; done < fileA
しかし、より高いパフォーマンスのソリューションを得るには、問題をより明確に定義する必要があります。たとえば、行全体を取得するだけで十分です。26の値として表示する必要はありません。