2014-02-26 3 views
0

awk 명령문에 출력되는 데이터를 어떻게 저장할 수 있습니까? 변수 또는 배열에서 액세스 할 수 있습니까? 통과하는 각 파일에 대해 4 개의 값 (GATC)과 모든 파일의 합계가 있습니다. 그것의 iterating 및 인쇄는 각 라인의 수를 추가하여 파일에 대한 기준에 맞는 find 인 경우 모든 라인을 모두 4 개로 찾습니다. 나중에 정보에 액세스 할 필요가 있습니다. 반드시 찾지 만 선은 필요하지 않습니다. 나는 그럴 필요가 없습니다. 어떻게해야 최선의 방법이라고 생각할 수있는 배열로 저장할 수 있습니까?bash awk 배열에 출력되는 내용을 저장합니다.

for f in $FILES 
do 
     [ -d "$f" ] && continue 

     if is_file_contains_DNA $f; then 
      echo "DNA exist in " $f >> $SUMMARYPATH 
     #touch $OUTFILENAME$f 
     awk '/^ATOM/&&substr($0,20,1)~/[GATC]/{print;l++;a[substr($0,20,1)]++}END{printf "total line : %s\n",l;for (i in a) printf "%s : %s \n",i,a[i]}' $f >> $RESULTSPATH$OUTFILENAME$f 
     else 
      echo "DNA DOES NOT exist in "$f >> $SUMMARYPATH 
     fi 

done 

추가 생각 :

쉬운 해결책이있을 수 있습니다. "awk"대신에 "awk"를 사용하여 두 개의 파일로 출력 할 수 있습니까? 그래서 내가 지금 가지고있는 결과 파일을 출력하고, awk 이전의 줄에 대해하는 것처럼 "SUMMARY"파일 하나에 추가하고 싶습니까?

+0

'배열 = ($ (awk 명령))'? –

+0

데이터의 모든 전체 라인을 원할 필요가 없다면 기준에 대한 반복 카운터 만 필요합니까? GATC와 각 히트를 찾고, 카운터에 추가하고 배열 목록에 추가 할 각 파일을 추적하고 싶습니다. 따라서 첫 번째 배열 [1]은 각 GATC와 총계의 합계를가집니다 ... 두 번째 배열 [2]는 파일 2를 가질 것입니다. – MAXGEN

답변

0

awk에서 파일 설명자를 사용하여 터미널에 일부 항목을 출력하고 bash 배열의 다른 데이터를 캡처 할 수 있습니다. awk 스크립트 a.awk 다음이 될 수 있도록 예를 들어

#! /bin/bash 

exec 6>&1 

files=(file1 file2) 
res=() 
numfiles=${#files[@]} 

for ((i=0; i<$numfiles; i++)) ; do 
    res[$i]=$(awk -f a.awk "${files[$i]}") 
done 

exec 6>&- 

awk 내에서 사용할 수 있습니다 번호 6과 새로운 파일 기술자가 열립니다 :

/^ATOM/ && substr($0,20,1)~/[GATC]/ { 
    print > "/dev/fd/6" 
    l++ 
    a[substr($0,20,1)]++ 
} 
END { 
    printf ("total line : %s\n",l) > "/dev/fd/6" 
    printf "%s ", l 
    for (i in a) { 
     printf ("%s : %s \n",i,a[i]) > "/dev/fd/6" 
     printf "%s ",a[i] 
    } 
} 
+0

이것은 가능한 해결책처럼 보입니다. 각 루프를 반복하면서 어떻게 통합 할 수 있을지 이해할 수 없습니까? 나는 "for"루프를 $ f를 반복자로 사용하기 전에 사용했다. 더 쉬운 해결책이있을 수 있습니다. "awk"대신에 "awk"를 사용하여 두 개의 파일로 출력 할 수 있습니까? 그래서 지금 가지고있는 결과 파일을 출력하고 하나의 "SUMMARY"파일에 추가하고 싶습니다. 내 질문을 업데이트하고 대부분의 코드를 추가합니다. – MAXGEN

+0

@MAXGEN 명령 행에서 요약 파일 이름을 awk에 입력하기 만하면 두 파일 모두에 쓸 수 있습니다. 'awk -vsfile = "$ SUMMARYPATH"'/^ATOM/.. ''$ f >> $ RESULTSPATH $ OUTFILENAME $ f'. awk 스크립트 내에서'print "xx">> sfile' –