줄 간격으로 파일의 일부를 선택하십시오.

줄 간격으로 파일의 일부를 선택하십시오.

이 데이터를 얻기 위해 head, uniq및 , 사용을 연습하고 싶습니다.cut여기. 나는이 사실을 알고철사그러나 cat외부 절차에 너무 많은 초점을 맞추고 있습니다.

나는 더 간단한 대답을 원한다.

데이터 파일에서 800-1600 행의 간격을 얻고 싶습니다. cut플래그 -n와 를 사용 할지 잘 모르겠습니다 -m. 적어도 라인은 추출할 수 없고 특정 바이트 위치의 패턴만 추출할 수 있습니다.

mikeserv의 답변 실행

code1.sh:

for i in 2 5
do    head -n"$i" >&"$((i&2|1))"
done <test.tex     3>/dev/null

그리고 데이터

1
2
3
4
5
6
7
8
9
10
11

코드를 sh 1.sh다음과 같이 실행하면 빈 줄이 출력됩니다 3 4 5 6 8. Mike의 답변을 이해하는 데 내가 뭘 잘못하고 있는 걸까요?

, 및 데이터 sedtailhead간격을 선택하는 방법은 무엇입니까 cut?

답변1

댓글에서 코스타스의 우아한 답변

sed '800,1600 ! d' file

답변2

for i in 799 800
do    head -n"$i" >&"$((i&2|1))"
done <infile     3>/dev/null

위 코드는 파일의 처음 799줄을 보냅니다.lseek()유능한<infileto /dev/null, 다음 800줄은 stdout과 동일합니다.

이 800개 행을 잘라내고 싶다면순서대로|uniq이 경우에는 다음을 수행할 수도 있습니다.

sed -ne'800,$!d;1600q;N;/^\(.*\)\n\1$/!P;D' <infile

...그러나 신중한 도박꾼은 head;head|uniq게임에 돈을 투자할 것입니다.

이 라인을 처리하려면완전히 sort편집됨고유한 경우에도 여전히 첫 번째 for루프를 사용하여 추가할 수 있습니다.

... 3>/dev/null  | grep -n ''      | 
sort -t: -uk2    | sort -t: -nk1,1 | 
cut  -d: -f2-

후자의 경우 이 작업을 먼저 수행하는 것이 좋습니다 export LC_ALL=C.

관련 정보