두 개의 파일이 있습니다.
1) 다음과 같은 내용의 탭 파일. 이 참조 파일을 호출 해 보겠습니다.
V$HMGIY_01_rc Ncor=0.405
V$CACD_01 Ncor=0.405
V$GKLF_02 Ncor=0.650
V$AML2_Q3 Ncor=0.792
V$WT1_Q6 Ncor=0.607
V$KID3_01 Ncor=0.668
V$CNOT3_01 Ncor=0.491
V$KROX_Q6 Ncor=0.423
V$ETF_Q6_rc Ncor=0.547
V$E2F_Q2_rc Ncor=0.653
V$SP1_Q6_01_rc Ncor=0.650
V$SP4_Q5 Ncor=0.660
2) 두 번째 탭 파일에는 아래와 같이 검색 문자열 X가 포함됩니다. 이 파일을 search_string으로 부르 자 :
A X
NF-E2_SC-22827 NF-E2
NRSF NRSF
NFATC1_SC-17834 NFATC1
NFKB NFKB
TCF3_SC-349 TCF3
MEF2A MEF2A
내가하고 싶은 것은 : 첫 번째 검색어 (search_string 파일에서 X 열)를 가져 와서 참조 파일의 첫 번째 열에서 발생하는지 확인하십시오. 예 : 첫 번째 검색어는 NF-E2입니다. 이 문자열이 참조 파일의 첫 번째 열에 나타나는지 확인해야합니다. 그것이 발생하면 1 점을주고 그렇지 않으면 0 점을줍니다. 또한 패턴과 일치하는 횟수를 세고 싶습니다. 다음과 같이 출력을 생성하고 싶습니다.
X X in file? number of times it occurs
NF-E2 1 3
NRSF 0 0
NFATC1 0 0
NFKB 1 7
TCF3 0 0
참고 : 다른 파일에서 각 문자열을 검색해야합니다. 즉, 첫 번째 문자열 (Nf-E2)은 NF-E2.tab 파일에서 검색해야합니다. 두 번째 문자열 (NRSF)은 NRSF.tab 파일 등에서 검색되어야합니다. 또한 R 또는 Perl 스크립트 만 사용하여 프로그래밍하고 싶습니다.
도와주세요!!
여기에 맞게 연주하고 변경할 수있는 한 줄짜리가 있습니다.
perl -lanE '$str=$F[1]; $f="/home/$str/list/$str.txt"; $c=`grep -c "$str" "$f"`;chomp($c);$x=0;$x++ if $c;say "$str\t$x\t$c"' file2
두 번째 파일이라고 가정합니다 file2
. 다음은 내 컴퓨터에서 만든 입력 파일의 샘플 출력입니다.
NF-E2 0 0
NRSF 1 1
NFATC1 1 2
TCF3 1 3
MEF2A 0 0
단지 grep -c
발생 횟수를 계산하고 변수에 저장하는 데 사용합니다 $c
. chomp()
의 출력에서 줄 바꿈을 제거합니다 grep
. $x
0으로 설정되고 개수 ( $c
)가 0보다 크면 증가합니다. 그런 다음 결과는를 사용하여 인쇄됩니다 say
.
검색 문자열과 검색 할 파일 이름부터 시작하겠습니다.
$perl -lanE '$str=$F[1];$f=$str.".txt";print "$str $f"' file2
NF-E2 NF-E2.txt
NRSF NRSF.txt
NFATC1 NFATC1.txt
NFKB NFKB.txt
TCF3 TCF3.txt
MEF2A MEF2A.txt
설명
사용 된 Perl 명령 줄 스위치 :
-l
Perl은 우리를 위해 라인 엔딩을 처리합니다. Perl에게 감사드립니다!
-a
입력 파일의 필드를 다음과 같은 배열로 분할합니다. $F[]
-n
입력 파일 (file2)의 각 줄을 처리하기 위해 코드 주위에 암시 적 루프를 배치합니다.
-E
작은 따옴표 안에있는 코드를 실행하고 say
기능을 활성화합니다.
그런 다음 작은 따옴표 ( ''
) 안의 실제 코드 는 두 번째 필드의 값을 할당합니다. 즉, $F[1]
필드가 0에서 시작하기 때문에 변수에 $str
. $str
".txt"가 추가 된 값을 검색 문자열 인 변수 $ f에 할당합니다 . 그런 다음 검색 문자열 $str
과 파일 이름을 인쇄합니다 $f
.
편집 됨
Bash가 더 이해하기 쉽다면 여기에 Bash 버전이 있습니다.
#!/bin/bash
# Set tabs to align output columns
tabs -12
# Output headers
echo -e "X\tPresent?\tCount"
# Extract second column of file2
awk '{print $2}' file2 | while read item
do
# Work out name of file to search in
FILE="/home/${item}/list/${item}.txt"
# Count occurrences of $item in $FILE
COUNT=$(grep -cw "$item" "$FILE")
# If COUNT>0 the value is present
PRESENT=0
[ $COUNT -gt 0 ] && PRESENT=1
echo -e "$item\t$PRESENT\t$COUNT"
done
파일을로 저장 한 go
후 다음과 같이 실행하십시오.
chmod +x go # Only necessary for the first run
./go
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다