2013-07-29 4 views
3

에 저장 나는 어제 질문을 멋진 도움을받은 : 내가 해결하기 위해 AWK를 사용하는 요령을 얻고 생각 http://goo.gl/HfovmX배쉬 & AWK : 루프 디렉토리를 통해 모든 파일에 두 개의 분리 된 awk 명령을 실행하고 새 디렉토리

을 문제는 있지만 지금은 작업을 자동화해야하며 bash 및 awk에서도이 작업을 수행 할 수 있기를 바랍니다. 내가 Mac을 사용하고

서로 기록을 묶는없이 고유 식별자로 텍스트 파일의 무리가 있습니다

은 다른 스레드에서 다시 정리해 보면. 이들을 묶는 유일한 방법은 통계 패키지로 가져 오기 전에 텍스트 파일의 위치를 ​​파악하고 처리하는 것입니다.

솔루션 코드는 다음과 같습니다

awk '/^AB1/{ab1=$0;next}/^AB2/{print $1,$2,ab1}' file01.txt > newfile01.txt 

나는 파일 이름을 추가하는 문제는 출력 파일에 $ 7 위치를 가지고 있었다, 그래서 나는 두 번째 awk 명령을 실행하고 일 :

awk '{print $1,$2,$3,$4,$5,$6,FILENAME}' newfile01.txt > newnewfile01.txt 

무엇 나는이 파일들로 가득 찬 디렉토리에서 스크립트를 가리킬 수 있기를 바랄 뿐이다. 이상적으로 모든 * .txt에서 위의 명령을 실행 한 다음 동일한 파일 이름을 유지하는 새 디렉토리 (더 쉬운 경우) 또는 새 디렉토리로 같은 디렉토리에 저장 (예 : 파일 이름 앞에 'new').

나를위한 최종 결과는 모든 새 파일을 하나의 거대한 txt 파일로 가져 와서 수학 프로그램으로 가져 오는 것입니다. 이 가져온 파일은 이제 우리가 처음에 행을 가져온 ID를 식별하는 데 도움이되는 파일 이름을 갖게되며 분석 할 수 있도록 레코드를 한 줄/행에 묶는 모든 정보를 갖게됩니다.

도움/안내를 제공해 주셔서 감사합니다.

+5

awk와 친구들을 배우기 시작하십시오. 훌륭한 도움을 받으 라. ' Btw, 멋진 * 도움이 필요하시면, 그 대답을 받아주십시오. 질문 옆에있는 체크 표시를 클릭하면됩니다. 조금도! – hek2mgl

+3

이상적인 개념이지만 확실하게 목표로 할 가치가있는 목표입니다. 그동안 나는 최선을 다해 고투한다. 고맙게도, 의료 분야에서, 누군가가 결정적인 필요성을 가진 질문을 할 때, 반복적으로 훌륭한 도움을 제공하는 것은 제 동료들의 대부분처럼 구현합니다. 나는 이제까지 필요로하는 환자에게 "craniotomy를하는 방법을 배우는 시작"이라는 말을 지나치게 들키거나 엿 들었던 것을 기억하지 못합니다. 하지만 나는 빗나간 다. 다른 실에서 응답이 받아 들여진다. 적절한 쿼리 절차에 관한 나의 무지를 사과합니다. – FocusedEnergy

+1

나는 여물통을 읽었습니다. 사용자가 * 강력한 * awk 솔루션을 검색 할 때 대부분의 문제는 잘 설계되지 않은 데이터 구조로 인해 발생하므로 문제를 후 처리하기가 어렵습니다. 필자의 첫 번째 시도는 파일을 생성하는 프로그램의 출력 형식을 변경하는 것입니다.이것이 가능한가? – hek2mgl

답변

2

수정 제안 된 솔루션 있도록 현재 디렉토리에 *의 TXT 파일을 통해 지금 반복 :

for f in *txt ; do awk '/^AB1/{ab1=$0;next}/^AB2/{print $1, $2, ab1}' "$f" > "new$f"; awk '{print $1,$2,$3,$4,$5,$6,FILENAME}' "new$f" > "newnew$f"; done 

하지만 난 당신이 첫 번째 파일의 파일 이름을 원하는 의심하지 두 번째 파일 :

마지막으로
for f in *txt ; do awk '/^AB1/{ab1=$0;next}/^AB2/{print $1, $2, ab1, FILENAME}' "$f" > "new$f"; done 

, 당신은 무엇을 이해하는 데 도움이 될 것입니다 최초의 솔루션의 다음과 같은 멀티 라인 버전은 무슨 일 :

for f in *txt 
do 
    awk '/^AB1/{ab1=$0;next}/^AB2/{print $1, $2, ab1}' "$f" > "new$f" 
    awk '{print $1,$2,$3,$4,$5,$6,FILENAME}' "new$f" > "newnew$f" 
done 

당신은 당신의 특정한 필요 조건에 따라 이것을 시도하고 수정할 수 있습니다.

+1

cabad 감사합니다! 여러 예제와 특히 최종 멀티 라이너는 구문의 구조를 아주 기본적으로 파악하는 데 정말로 도움이됩니다. 나는 그것에게 소용돌이를 줬다. 그리고 그것은 일한다! – FocusedEnergy