あるコマンドの出力を保存し、別のコマンドの処理を行います。

あるコマンドの出力を保存し、別のコマンドの処理を行います。

私はUnixコマンドラインで作業しています。 2つのファイルがあります。私が欲しいcat file1.txtgrep出力file2.txt

ファイル1.txt

123A
223A
143A
153A
183A
123J
123P

ファイル2.txt:

123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 
123J ikik 780
123P haja 123
XRQE haja 123
XRQE haja 909

最後の2行はfile2.txt存在しません。file1.txt

似たようなことをしようとしています。

head file1.txt | **and ??** grep file2.txt

xargsを使用して保存しようとしましたが、$variableシェルがフリーズまたは機能しません。

予想出力:編集済み:

123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 
123J ikik 780
123P haja 123

答え1

?をfile2.txt使用して、文字列に存在する文字列を検索したいとします。file1.txt

その場合は、スイッチを使用してこれを行うことができgrepます-f

grepのマニュアルページから抜粋
  -f FILE, --file=FILE

1行に1つずつFILEからパターンを取得します。空のファイルにはパターンが0個含まれているため、一致するものはありません。 (-f は POSIX で指定されます.)

したがって、次のことを試してください。

$ grep -f file1.txt file2.txt 
123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 
123J ikik 780
123P haja 123

file1.txt の一部を渡します。

一方、次の文字列の一部のみを検索file1.txtしたい場合プロセスの交換サブセットを動的に生成し、file1.txtそれを一時ファイルに渡すスイッチ。grep-f

たとえば、
$ grep -f <(head -5 file1.txt) file2.txt 
123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 

その後、最初の5行を取得し、シンボルを介して一時file1.txtファイルに 。<(..)grep

関連情報