output.txt
저는 5000개 이상의 파일 컬렉션을 가지고 있으며 모든 파일과 해당 파일 이름의 27번째 줄을 포함하는 파일을 만들고 싶습니다 . 내가 인터넷에서 얻은 것은 awk
or sed
명령을 사용하여 단일 파일에서 특정 줄을 선택하는 것입니다. 예를 들면 다음과 같습니다.
$sed -n 27p *.txt >>output.txt
예를 들어 디렉터리에 있는 내 파일은 다음과 같습니다.
log_1.txt
log_2.txt
log_3.txt
log_4.txt
.
.
.
나는 각 파일의 라인 27과 해당 파일 이름이 새 파일의 인쇄된 라인 앞이나 뒤에 있기를 원합니다 output.txt
.
답변1
awk 'FNR==27 {print FILENAME, $0}' *.txt >output.txt
FILENAME
현재 입력 파일 이름의 내장 awk 변수입니다.FNR
현재 파일의 줄 번호를 참조합니다.$0
전체 라인을 나타냅니다.
답변2
또 다른 가능성은 다음과 같습니다.
for i in * ; do echo -n $i" : " ; head -n 27 "$i" | tail -n 1 ; done > output.txt
답변3
for
루프를 사용하십시오 .
{ for i in *.txt; do echo "$i : $(sed -n '27p' "$i")"; done ;} >output.txt
5000개 이상의 파일이 있기 때문에 루핑 for
비용이 많이 들 수 있지만 현재 하드웨어를 고려하면 문제가 되지 않습니다.
더 빠른 방법, sed
27호선 이후 출구(@Fiximan에게 감사드립니다):
{ for i in *.txt; do echo "$i : $(sed -n '27p;q' "$i")"; done ;} >output.txt
답변4
간단한 awk 사용법:
awk 'FNR==27 {print FILENAME,$0}' /path/to/files/log_*.txt > outfile.txt