이 데이터를 얻기 위해 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의 답변을 이해하는 데 내가 뭘 잘못하고 있는 걸까요?
, 및 데이터 sed
의 tail
행 head
간격을 선택하는 방법은 무엇입니까 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()
유능한<infile
to /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
.