![두 목록 사이의 힘든 grep](https://linux55.com/image/173106/%EB%91%90%20%EB%AA%A9%EB%A1%9D%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%ED%9E%98%EB%93%A0%20grep.png)
두 개의 다른 txt 파일이 있습니다. "all_E3.txt"라는 첫 번째 항목에는 개체 목록(열)이 포함되어 있으며 해당 목록에는 중복된 개체도 많이 있습니다. "UPS.txt"라는 다른 파일에는 열에 개체 목록이 있으며(중복 없음) 각 개체는 변수(동일한 행과 다른 열, 숫자 또는 "NA")와 연결됩니다.
이 파일에는 "all_E3.txt" 파일에도 개체가 있습니다(단, 이에 국한되지 않음). "ALL_E3.txt"에 있는 모든 개체와 "UPS.txt"에 따른 해당 변수를 포함하는 "output_UPS.txt"라는 다른 파일을 가져오고 싶습니다. 예를 들어:
- 파일 "all_E3.txt":
AMFR AMFR AMFR ANAPC11 CRB CRB TER CAM DVDE
- 파일 2 "UPS.txt"
AMFR 0 REF 1 SDRF N.A. BHU 3 ANAPC11 2 CRB 2 YUT 1 TER 0 CAM 3 WERS N.A. DVDE 3
- 파일 출력 "output_UPS.txt"
AMFR 0 AMFR 0 AMFR 0 ANAPC11 2 CRB 2 CRB 2 TER 0 CAM 3 DVDE 3
다른 조직의 파일을 사용하는 유사한 설정에서 친구의 조언에 따라 다음을 시도했습니다.
for name in ????_?
do
for file in $name/Pocket_???_$name\.pdb_OUTPUT.txt
do
grep -H Exposed $file | uniq
done
done
하지만 현재 상황에 적응할 수는 없습니다. 운영체제는 CentOS 7입니다.
누구든지 저를 도와주실 수 있나요? 감사해요.
답변1
awk
유효한 대안 이라면 grep
다음이 작동합니다.
awk 'NR==FNR{a[$1]=$2} NR>FNR{print $1,a[$1]}' UPS.txt all_E3.txt > output_UPS.txt
- 그러면 먼저 첫 번째 열과 두 번째 열 사이의 매핑을 읽고 만듭니다
UPS.txt
.a
- 처리가 다음 파일에 도달하면
all_E3.txt
(NR
전역 행 카운터가FNR
파일별 행 카운터와 다름) 해당 파일의 "첫 번째 열"과 이전에 생성된 맵의 관련 값을 출력합니다. 2열.
출력은 으로 리디렉션됩니다 output_UPS.txt
.