한 명령의 출력을 저장하고 다른 명령을 위해 처리합니다.

한 명령의 출력을 저장하고 다른 명령을 위해 처리합니다.

저는 Unix 명령줄에서 작업하고 있습니다. 두 개의 파일이 있습니다. 내가 원 cat file1.txt하고 grep출력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

한 줄에 하나씩 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

관련 정보