
2760줄의 파일이 있고 2740줄에 ID가 있습니다. 결과적으로 항상 맨 위에서 7행을 출력해야 합니다. 일부 파일에는 더 많은 행이 포함되고 일부 파일에는 더 적은 행이 포함되지만 출력은 항상 7행의 값입니다.
내가 사용하고 있는 것은 grep 'PATTERN' | sed -n '7p' yyyymmdd*.log
패턴과 일치하는 것 같지만 디렉터리에서 찾은 첫 번째 파일의 7행을 출력합니다.
누구든지 나를 올바른 방향으로 밀어줄 수 있다면 감사하겠습니다.
답변1
특정 파일 이름 패턴과 일치하려면 각 입력 파일의 7행이 필요합니까?
awk 'FNR==7' file*
이 awk
변수는 FNR
현재 입력 파일의 줄 번호가 됩니다. 7이면 해당 행을 인쇄하십시오.
또는 GNU를 사용하십시오 sed
.
sed -n -s '7p' file*
GNU sed
옵션은 -s
입력 파일 사이에서 내부 라인 카운터를 재설정하게 합니다(이것은 표준 GNU 확장입니다 sed
).
일부 정규식을 기반으로 결과를 필터링해야 하는 경우 grep 'PATTERN'
또는 다음을 통해 출력을 파이프하면 됩니다 awk
.
awk 'FNR==7 && /PATTERN/' file*
또는 GNU를 사용하십시오 sed
.
sed -n -s '7{/PATTERN/p}' file*
당신의 명령:
grep 'PATTERN' | sed -n '7p' yyyymmdd*.log
몇 가지 문제:
- input 이 없으면
grep
표준 입력 스트림에서 입력을 기다립니다. sed
전체 입력 파일 세트에서 라인 7만 선택됩니다(즉, 첫 번째 파일만) . 해당 라인 카운터는 파일 간에 재설정되지 않습니다. 위에서 언급했듯이sed
.-s
- 파이프의 두 부분이 연결되어 있지 않습니다.
sed
에서는 읽을 수 없습니다grep
. - 불필요한
grep
. 7행만 있으면 됩니다.
답변2
나는 노력할 것이다
awk '/PATTERN/ { c[FILENAME]++ ; if (c[FILENAME]==7) print ; } ' yyyymmdd*.log
어디
- 이
c[FILENAME]
트릭은 각 파일의 7번째 줄을 선택합니다.
답변3
GNU를 사용하면 sed
이것이 가능합니다. 예를 들어 PATTERN
포함된 파일의 줄 번호 만 표시하려면 yyyymmdd*.log
다음을 시도해 보세요.
sed -n '2740s/PATTERN/PATTERN/p' yyyymmdd*.log
이는 지정된 행 번호(2740)를 명령 앞에 붙이고 search
일치하지 않는 한 출력을 억제합니다.sed
-n
p