2013-03-04 4 views
0

이것은 주로 솔루션을 검색하고 게시물을 읽은 후 스택 오버플로에 게시 한 첫 번째 사례입니다. 나는 문자열을 "H #"또는 "h #"문자열로 검색하고자하는 ext .u.clean 파일을 여러 문자열로 검색 할 수 있도록 bash를 사용하여 루프를 실행하려고합니다. #가 1-28이고 문자열에서 검색된 번호가있는 파일로 출력합니다. 두 필드 ($ 5 및 $ 0)에서 두 가지 별도의 검색을 수행하고 있으며 "temp"# .txt 파일에 고유 한 일치 항목의 총 수를 출력하려고했습니다. 이 후 파일에 입력 된 두 숫자에 대해 몇 가지 계산을 수행하려고합니다. 지금까지 나는 이것을 멀리 보았다 :bash for 루프 변수 (awk 포함)

for i in {1..28}; do 
    awk -v var="$i" -F"\t" ' $19 ~ "_[hH]"var {print $0}' */*.u.clean | \ 
     sort | uniq | wc -l > 'temp'$i'.txt' | \ 
     awk -v var="$i" -F"\t" ' $19 ~ "_[hH]"var {print $5}' */*.u.clean | \ 
     sort | uniq | wc -l >> 'chris'$i'.txt' 
done 

문제는 숫자가 잘못 나오는 것입니다. 나는 총 28 "temp"# ". txt"파일을 얻고 있지만 입력은 정확한 단어 수가 아닙니다. 나는 또한 수학 연산을하는 방법을 모른다. 나는 그 안에 숫자가 들어있는 파일을 가지고있다. 누군가 나를 도와 주거나 올바른 방향으로 나를 가리킬 수 있습니까? 어떤 도움을 주셔서 감사합니다.

편집 :

112 E 03 294168 FBLN7_rs335586251.5 GG
2013년 1월 23일 2 3 VSD 제어 130123_CR_CH5_H26 1 A :

여기

입력의 일부처럼 보일 수 있습니다 것입니다 .Conservative

D 17 11 294,319 FBLN7_rs335586251.5 GG
06/26/2012 2 3 VSD 제어
1 20626_CR_CH5_H3 1 A.Conservative

22 B 01 294,703 FBLN7_rs335586251.5 GG
06/26/2012 2 VSD 제어
120626_CR_CH5_H4 1 A.Conservative

(103A) 07 295,033 FBLN7_rs335586251.5 GG
01/2,013분의 23 2 1 VSD 제어
130123_CR_CH5_H23 1 A.Conservative

44 G 07 295,119 Tbx5_rs61931008.5 GG
2012년 7월 11일 2~5 ASD 제어
120711_CR_CH5_H12 1 A.Conservative

42 H 12 295,201 JAG1_rs1232607.5 GG
2012년 7월 11일 1 2 ASD 제어
120711_CR_CH5_H12 1 A.Conservative

I가 카운트를 찾기 위해 시도하고 필드 19 (텍스트 Tbx5_rs61931008.5가있는 필드)에서 H '#'의 각 항목은 #가 1-28 사이에서 발생하며 각 번호를 각 H #에 대해 별도의 파일로 출력합니다. 그런 다음 H #의 이러한 일치를인지하고, 필드 5의 몇 가지 고유 한 경우가 있는지 확인하고 각 H #에 대해 동일한 파일에 해당 번호를 출력합니다. 나는 이것이 분명하고, 그것이 아닌 이드를 알리 길 바란다. 감사.

+3

질문에 대한 답변을 훨씬 쉽게 만들어주기 때문에 질문을 일부 입력과 예상 출력으로 업데이트 할 수 있습니까? SO BTW에 오신 것을 환영합니다 :-) –

+2

'wc -l> 파일 | awk ...'파이프 라인의 일부가 분명히 잘못되었습니다; 'wc -l> file을 의미합니까? awk ...'대신? 파일로 리다이렉트하고 동시에 파이프 라인을 계속할 수 없다. (정말로 원하는 경우'wc -l | tee file | awk ... '같은 것을 제외하고). – tripleee

+0

불행하게도 당신이하려고하는 것을 이해하는 것은 꽤 어렵습니다. 그러나 의심스러운 일이 일어나고 있습니다. 두 필드 ($ 5와 $ 0)에서 두 가지 별도의 검색을 수행하고 있습니다. 당신은 $ 0와 $ 5를 인쇄하고 있습니다. 검색은 필드 $ 19에서 두 번 실행됩니다. 편집 : 위의 의견에서 언급 한'>'문제를 발견하지 못했습니다. 그 때가 당신의 주된 문제입니다. – mikyra

답변

1

이것은 여러분이 성취하고자하는 것에 다소 복잡해 보입니다.나는 당신은 출력을해야하고이이 후 당신이 필요합니다 정확하지 않은 경우, 파일에 하나의 h# 한 줄이 있다고 가정

수학을 할 find

find . -name "*.u.clean" -exec egrep -c '([Hh][1-9])|([Hh][1-2][0-9])' 

grep을 사용하는 것이 좋습니다 것입니다 조금 더 일을해야합니다. 모든 파일을 찾은 다음 egrep -o '([Hh][1-9])|([Hh][1-2][0-9])' | wc -l을 사용하여 각 파일의 합계를 구할 수 있습니다.

+0

총계가 아닌 H1-H28의 각 항목의 총수를 계산하고 싶습니다. 감사. – charlesshaw