awk를 사용하여 두 줄 사이의 내용을 가져옵니다.

awk를 사용하여 두 줄 사이의 내용을 가져옵니다.

질문 1:

awk아래와 같이 서로 다른 두 키워드 사이의 행을 가져오는 데 사용할 수 있습니다.

$cat test1.sh
#!/bin/bash
awk '/1/,/5/{print}' file.txt

$ cat file.txt 
0
1
2
3
4
5
6
7
8
1
q

출력은 다음과 같습니다

$ sh -x test1.sh 
+ awk '/1/,/5/{print}' file.txt
1
2
3
4
5
1
q

"1 2 3 4 5"만 어떻게 얻을 수 있나요? 사용하지 마십시오 grep -B.grep -Ased

질문 2: 두 개의 동일한 키워드 '1' 사이에서 "1 2 3 4 5 6 7 8 1"을 얻는 방법은 무엇입니까? 및 를 사용 하지 마십시오 grep -B.grep -Ased

답변1

내보내기를 사용할 수 있습니다.

$ awk '/1/,/5/{print}$0==5{exit}' file.txt

$ awk '$1==1{a++}a>=2{print;exit}a{print}' file.txt
1
2
3
4
5
6
7
8
1

$1==1{a++} --> 첫 번째 필드 값이 1이면 변수 a의 값을 늘립니다.

a>=2{print;exit} --> a 값이 2보다 크거나 같으면 현재 줄을 인쇄하고 종료합니다(파일을 더 이상 처리하지 않음).

a{print} --> a의 값이 0이 아니면 다음 줄을 인쇄합니다.

답변2

sed작업에 적합한 도구입니다. 왜 사용하면 안되는지 정말 모르겠습니다. 이것이 숙제라면 선생님에게 불평하는 것을 고려해 보세요.

$ sed -n -e '/^1/,/^5/p' -e '/^5/q' file.txt
1
2
3
4
5

이 명령은 sed( )와 및 일치하는 줄 p사이의 모든 줄을 인쇄합니다. 또한 일치하는 줄이 발견되면 종료()됩니다. 기본 출력은 꺼짐( )입니다./^1//^5/q/^5/-n

$ sed -n '/^[1-9]/p' file.txt
1
2
3
4
5
6
7
8
1

관련 정보