2017-02-24 2 views
1

저는 50 개의 텍스트 파일이있는 폴더가 있고 명령 줄에서 각 줄의 첫 줄을 추출하여 result.txt 파일에 출력하려고합니다.awk를 사용하여 디렉토리의 모든 텍스트 파일에서 특정 줄을 추출합니다.

내가 함께 일하고 있어요 파일이 들어있는 디렉토리에서 다음 명령을 사용하고 있습니다 :

for files in *; do awk '{if(NR==1) print NR, $0}' *.txt; done > result.txt 

나는 명령을 실행의 Result.txt 파일의 50 개 라인을 포함을하지만 그들은 모든 것 파일 당 한 행이 아닌 디렉토리의 단일 파일에서. 공통점은 50 개의 파일 각각에 대한 것이 아니라 50 회 반복되는 것으로 보입니다.

누군가 내가이 문제로 어디로 잘못 가고 있는지 이해할 수 있으면 감사 할 것입니다.

답변

2

왜 머리를 쓰지 않습니까? 발견과 함께 예를 들어

find midir/ -type f -exec head -1 {} \; >> result.txt 

당신이 AWK와 함께 와일드 카드를 사용하는 파일을 지정하지 할 필요가 당신이 당신의 접근 방식을 따르십시오 :이 시도

for files in *; do awk '{if(NR==1) print NR, $0}' "$files"; done > result.txt 
3

을 -

for i in *.txt;do head -1 $i;done > result.txt 

을 또는

for files in *.txt;do awk 'NR==1 {print $0}' $i;done > result.txt 
+0

우수, 많은 감사. 이 두 가지 솔루션 모두 – DanielH

3

  1. 당신은 반복 * 이상하지만 루프 몸이 $files를 사용하지 않는 외부 루프를 가지고 : 코드는 두 가지 문제가있다. 즉, awk '...' *.txt을 50 번 호출합니다. 이것이 awk의 모든 출력이 result.txt에서 50 번 반복되는 이유입니다.

  2. 귀하의 AWK 코드 검사 NR는 (행의 수는 지금까지 읽기),하지 FNR는 (행의 수는 현재 파일 내 을 읽기). NR==1은 첫 번째 파일의 시작 부분에서만 true입니다. result.txt 처음 만들 때문에이 *.txt 사이에 포함되어

가 또 다른 문제입니다. 이를 피하려면 다른 이름 (.txt으로 끝나지 않는 이름)을 지정하거나 다른 디렉토리에 넣으십시오.

가능한 수정 : 둘에

awk 'FNR==1 {print NR, $0}' *.txt > result 
관련 문제