2013-11-28 2 views
1

큰 파일이 있습니다. 각 줄은 하나의 레코드입니다. sed에 대한 직업 같아.sed 한 줄 주소가 전체 파일을 통과하는 것 같습니다.

한 번에 하나씩 몇 줄의 데이터를 검사하고 싶지만 base64로 인코딩 된 값이있는 json입니다. 2 호선을 검사하기 위해 다음을 실행합니다 :

sed -n 2p hugeFile | json 'key' | base64 --decode 

sed가 파일을 통과하는 것으로 나타나는 것을 제외하고는 아무 문제가 없습니다.

여기에 sed를 잘못 사용하고 있습니까, 아니면 실제로 모든 파일을 검토하면서 각 행을 점검하여 2 행인지 확인하고 있습니까?

답변

3

중괄호로 여러 명령을 결합 할 수 있으며 즉시 종료하려면 q 명령을 실행하십시오.

sed -n '2{p;q;}' hugeFile 

여러 명령이 있거나 한 줄 번호가 아닌 주소이기 때문에 이러한 방식으로 작동합니다. sed은 명령이 하나 뿐이며 행 번호 범위 인 특수한 경우를 최적화하지 않습니다.

+0

이 경우 도움이됩니다. 그러나 거대한 파일의 한가운데에 한 줄을 인쇄하고 싶다고 가정하면 [tag : sed]가 줄 단위로 처리하는 것을 어떻게 막을 수 있습니까? 나는 그것이 불가능하다고 생각한다. 이 문제는 [tag : awk]로 해결할 수 있습니까? – pfnuesel

+0

줄 단위로 처리하지 않고 파일 중간에있는 줄은 어떻게됩니까? 텍스트 파일에는 특정 줄 번호로 곧바로 갈 수있는 색인이 없으므로 순차적으로 읽고 줄 바꿈을 계산해야합니다. – Barmar

+0

나는 갑자기 내가 알고있는 sed가 얼마나 작은 지 깨닫는다 - 나는 np가 n이라는 주소를 알기보다는 n이 주소이고 p가 인쇄 명령임을 알 것이라고 가정한다. 그 다음에는'2 {p; q;}'가 '2 번 줄에 줄을 인쇄 한 다음 종료합니다'라고 가정합니다. – Squidly

관련 문제