에 꼬리를 구현 고양이 somefile | awk -f tail.awk 10 텍스트 파일의 마지막 10 행을 shoud로 인쇄하십시오. 제안 사항은 무엇입니까?
답변
for(i=NR-num;i<=NR;i++)
print vect[$i]
$
은 위치 매개 변수를 나타냅니다. i
그냥 일반 사용
for(i=NR-num;i<=NR;i++)
print vect[i]
나를 위해 일한 전체 코드는 다음과 같습니다
#!/usr/bin/awk -f
BEGIN{
num=ARGV[1];
# Make that arg empty so awk doesn't interpret it as a file name.
ARGV[1] = "";
}
{
vect[NR]=$0;
}
END{
for(i=NR-num;i<=NR;i++)
print vect[i]
}
당신은 아마 경우 NR
< num
을 처리 할 END
에 일부 코드를 추가해야합니다.
다른 대안이 있으면 궁금했다. 여전히 ARGV에서 오류가 발생한다. [1 ] ------------------------------------------------ ----------- cat test1.txt | awk -f tailawk 10 –
내가 BEGIN {num = ARGV [1]}을 추가했다고 생각하십시오. –
num
값을 설정하려면 awk 명령 행에 -v num=10
을 추가해야합니다. 그리고 마지막 루프에서 NR-num+1
으로 시작하십시오. 그렇지 않으면 num+1
출력 라인이됩니다.
예 thx nr-num을 역방향으로 읽으려고 시도 했으므로 nr-num을 증가시키는 것을 잊어 버렸습니다. 인덱스 및 증분, 잊어 버려 어쨌든 –
이 당신을 위해 작동 될 수 있습니다
awk '{a=a b $0;b=RS;if(NR<=v)next;a=substr(a,index(a,RS)+1)}END{print a}' v=10
설명했다면 나는 이것을 upvote 줄. 나는 그것을 이해할 수 있지만 모든 사람에게 설명이 필요하다. – Camusensei
이 답변은 모두가 전체 소스 파일을 저장합니다. 그것은 끔찍한 생각이며 더 큰 파일을 망가뜨릴 것입니다.
여기에 출력되는 라인의 수를 저장하는 빠른 방법이다 (참고 그는 전체 소스 파일을 읽을하지 않기 때문에 tail
항상 더 빠른 것 더 효율적으로!) :
awk -vt=10 '{o[NR%t]=$0}END{i=(NR<t?0:NR);do print o[++i%t];while(i%t!=NR%t)}'
더 읽기 쉽게 (덜 code golf과) : 읽기 쉬운 코드의
awk -v tail=10 '
{
output[NR % tail] = $0
}
END {
if(NR < tail) {
i = 0
} else {
i = NR
}
do {
i = (i + 1) % tail;
print output[i]
} while (i != NR % tail)
}'
설명 :
이것은 modulo operator에 사용 원하는 수의 항목 만 저장하십시오 (tail
변수). 각 행이 파싱되면 이전 배열 값의 맨 위에 저장됩니다 (따라서 11 행은 output[1]
에 저장됩니다).
END
스탠자는 증가 변수 i
을 0 (원하는 줄 수보다 적 으면)으로 설정하거나 줄 수를 설정하여 저장된 줄을 다시 시작할 위치를 알려줍니다. 그런 다음 저장된 줄을 순서대로 인쇄합니다. 루프는 우리가 첫 번째 값으로 돌아 왔을 때 끝난다.
당신이 요청 된 수 (echo "foo" |awk -vt=10 …
가있는 라인 전에 아홉 개 빈 줄을 것을 채우기 위해 빈 줄을 점점 걱정하지 않는 경우에 당신은 i = NR
와 if
/else
스탠자 (또는 내 golfed 예에서 ternary clause를) 대체 할 수있다 "foo").
- 1. 는 어떻게 <code>awk</code>을 테스트입니다 AWK
- 2. 넣어 AWK 강타의 코드와 내 코드</p> <p>">>"나는이 개 파일을 결합하는 AWK 코드가
- 3. awk '{print $ 2, ",", $ 1}?
- 4. 연산자 << : std :: cout << i << (i << 1);
- 5. awk : END 블록에서 'exit'catch
- 6. 신비 그래서 내가 원하는</p> <p>...
- 7. AWK 방법 AWK
- 8. 는</p> <p>가 난 할 노력하고있어 것은 ... 문
- 9. AWK 최적화
- 10. AWK 내가 파일이 두 번째
- 11. AWK :
- 12. TaskFactory Indexer 재설정 중? 내가 예를 들어, 만드는 오전</p> <pre><code> for (var i = 0; i < 3; i++) { Task t = Task.Factory.StartNew(Consume); } </code></pre> <p>와
- 13. AWK print 0에서 증가하는 FNR
- 14. awk 스크립트 내가 여기에 연결 한 것처럼 데이터 집합을 수정 또는 가능 그렙 솔루션 (AWK 새로운)
- 15. 여기 ICollection은 <>
- 16. AWK : 여러 명령
- 17. 내가 내가 document.write를 코드 (iframe이로)</p> <p>예를 들어 페이지를로드 할 iframe을
- 18. awk가 4 문자 길이로만 출력 할 수 있습니까? 내가</p> <pre><code>awk -F: '{print $1}' /etc/passwd </code></pre> <p>을 할 경우
- 19. 작은 따옴표로 awk 명령을 실행하십시오.
- 20. 는 AWK
- 21. MySQL의 COUNT - 여기 <p></p>이
- 22. AWK 인쇄는
- 23. bash에서 awk 변수 사용
- 24. AWK 작업 경로를 종료하고 내가 awk 스크립트와 같은의 뼈대를 사용하고 END 부분
- 25. AWK + 수행 또는 행동 awk 명령에하는 방법
- 26. AWK : MySQL은 :이 MySQL의 쿼리를 가지고 내가 awk 명령에서 사용하려는
- 27. awk 명령의 두 변수
- 28. AWK - 파일
- 29. AWK 도움
- 30. 그래서 같은 <code>SimpleDateFormat</code>에
awk -f tail.awk num = 10', 10 자체는 파일 이름으로 해석됩니다. 행운을 빕니다. – shellter
정말로 전체 파일을 저장해야합니까? – Johnsyweb
@Johnsyweb 잘 아니지만 그게 내가 생각한 접근법이야, 다른 아이디어가있어? 그 (것)들을 배치하게 자유롭게 떨어졌다 : –