2013-07-25 2 views
0

그래, 그래서 값 목록을 생성하는 스크립트를 만들었지 만 (단순함을 위해 줄 바꿈 문자로 구분됨) 생성되어 하나의 순서로 파일에 저장됩니다. 하지만 파일을 역순으로 처리해야합니다 (데이터 세트가 상당히 커질 수 있으므로 효율성상의 이유로 첫 번째 단계가 어떻게 작동하는지 변경할 수 없습니다).파일을 한 줄씩 역방향으로 읽는 데 가장 호환되는 방법

저는 유용한 명령 인 tactail -r에 대해 잘 알고 있습니다.하지만 불행히도 내가 일하고있는 환경에는 아무런 문제가 없습니다 (기본 POSIX 표준 외에도 많은 부분이 있다고 생각하지 않습니다).

그래서 내가 찾고있는 가장 좋은 방법은 가능한 한 작은 메모리 오버 헤드로, 파일이 상당히 커질 수 있습니다 (개별 라인을해야 할 수도 있습니다 역순으로 파일에서 라인을 읽는 것입니다 상대적으로 작음).

+1

두 가지 목표가 충돌하는 것 같습니다. 파일이 추가 될 때마다 이미 소비 했어야하는 레코드가 추가됩니다. 또한, 귀하의 환경은 무엇입니까? – chepner

+0

가능한 복제본 : [unix : "tac"을 사용하지 않고 어떻게 파일을 역순으로 인쇄 할 수 있습니까?] (http://unix.stackexchange.com/questions/9356/how-can-i-print-lines-from) -file-backwards-without-using-tac) – ahilsend

+0

@chepner 처음으로 스트림에서 읽고있는 데이터를 읽고 필요한 파일 만 필터링하여 파일에 기록합니다. 그러나 거대한 데이터 세트에 대해 제정신이 아닌 메모리를 사용하려면 값을 처리 순서대로 써야합니다. 그러나 일단 완료되면 역순으로 실제로 처리해야하므로 역순으로 파일을 한 줄씩 읽는 것이 필요합니다. 현재는 역순으로 처리하기 위해 덩어리만을 메모리로 읽지 만 예쁜 것은 아닙니다. – Haravikk

답변

1

이 방법을 사용하면 펄이 설치되어있는 경우 높은 메모리를해야합니다 sort 오버 헤드

cat -n filename | sort -rn | cut -f2- 

, 당신이 File::ReadBackwards 같은 모듈을 사용할 수 있습니다 사용합니다.

+0

나는 너무 많은 메모리 오버 헤드를 피하기를 바랬지 만 스크립트는 휴대용이기 때문에 펄이나 의존성을 사용할 수 없다. 'sort'만이 유일한 진정한 옵션 인 것 같습니다. 답을 주셔서 감사합니다! – Haravikk

관련 문제