txt 파일이 있다고 가정하면 파일의 상위 10 줄과 아래쪽 10 줄을 동시에 보는 명령은 무엇입니까?
즉, 파일 길이가 200 줄이면 1-10 행과 190-200 행을 한 번에 봅니다.
답변
간단하게 할 수 있습니다 :
(head; tail) < file.txt
그리고 어떤 이유로 파이프를 사용해야하는 경우 다음과 같이하십시오.
cat file.txt | (head; tail)
참고 : file.txt의 줄 수가 head의 기본 줄 + tail의 기본 줄보다 작 으면 중복 된 줄이 인쇄됩니다.
답변
ed
입니다 standard text editor
$ echo -e '1+10,$-10d\n%p' | ed -s file.txt
답변
순수 스트림 (예 : 명령 출력)의 경우 ‘tee’를 사용하여 스트림을 분기하고 하나의 스트림을 머리에, 하나의 스트림을 머리에 보냅니다. 이를 위해서는 bash (+ / dev / fd / N)의 ‘> (list)’기능을 사용해야합니다.
( COMMAND | tee /dev/fd/3 | head ) 3> >( tail )
또는 복잡한 리디렉션이있는 / dev / fd / N (또는 / dev / stderr) 및 서브 쉘 사용 :
( ( seq 1 100 | tee /dev/fd/2 | head 1>&3 ) 2>&1 | tail ) 3>&1
( ( seq 1 100 | tee /dev/stderr | head 1>&3 ) 2>&1 | tail ) 3>&1
(이들 중 어느 것도 csh 또는 tcsh에서 작동하지 않습니다.)
약간 더 나은 제어 기능을 갖춘 무언가를 위해 다음 perl 명령을 사용할 수 있습니다.
COMMAND | perl -e 'my $size = 10; my @buf = (); while (<>) { print if $. <= $size; push(@buf, $_); if ( @buf > $size ) { shift(@buf); } } print "------\n"; print @buf;'
답변
(sed -u 10q; echo ...; tail) < file.txt
(head;tail)
테마의 또 다른 변형 이지만 작은 파일의 초기 버퍼 채우기 문제를 피하십시오.
답변
head -10 file.txt; tail -10 file.txt
그 외에는 자신의 프로그램 / 스크립트를 작성해야합니다.
답변
JF Sebastian의 의견을 바탕으로 :
cat file | { tee >(head >&3; cat >/dev/null) | tail; } 3>&1
이 방법으로 첫 번째 라인과 나머지 라인을 하나의 파이프에서 다르게 처리 할 수 있으며 이는 CSV 데이터 작업에 유용합니다.
{ echo N; seq 3;} | { tee >(head -n1 | sed 's/$/*2/' >&3; cat >/dev/null) | tail -n+2 | awk '{print $1*2}'; } 3>&1
N * 2 2 4 6
답변
여기서 문제는 스트림 지향 프로그램이 파일의 길이를 미리 알지 못한다는 것입니다 (실제 스트림 인 경우 파일 길이가 없기 때문에).
같은 도구 tail
다음 인쇄 본 마지막 n 라인을 버퍼 및 스트림의 마지막 기다립니다.
단일 명령 으로이 작업을 수행하려면 (오프셋으로 작동하고 겹치는 경우 줄을 반복하지 않도록) 언급 한이 동작을 에뮬레이트해야합니다.
이 awk를보십시오 :
awk -v offset=10 '{ if (NR <= offset) print; else { a[NR] = $0; delete a[NR-offset] } } END { for (i=NR-offset+1; i<=NR; i++) print a[i] }' yourfile