grep하기가 어렵습니다. 이 번호를 어떻게 격리할 수 있나요?

grep하기가 어렵습니다. 이 번호를 어떻게 격리할 수 있나요?

다음 파일 내용이 있습니다.

  63 41,3,11,12 
  1 31,60,72,96 
  7 41,3,31,14,15,68,59,60 
  7 60,72,96 
  7 60 
  1 41,3,31,31,14,15,68,59,60 
  60 41,3,115,12,13,66,96 
  1 41,3,11,12,13,66,96 

"60" 앞에 "7"을 grep해야 합니다("60" 뒤에 "72,96"이 오지 않음).

답변1

의견을 바탕으로 수정된 예시

$ cat ip.txt
  7 60,72,96 
  7 60 
3 601
 2 60,72,962
5 60,3
43 60   
3 52360

$ grep -oP '^\h*\K\d+(?=\h+60\h*$)' ip.txt 
7
43
  • -oP일치하는 부분만 인쇄하고 PCRE를 사용하세요.
  • ^\h*\K줄의 시작 공백 문자 무시
  • \d+인쇄할 수량
  • (?=\h+60\h*$)뒤에 공백 문자가 오는 경우에만 60줄 끝까지 공백이 선택 가능합니다.

또는 awk현장 기반 처리에만 사용됩니다.)

답변2

두 번째 필드가 있는 줄에서 첫 번째 필드를 가져옵니다 60(GNU awk뿐만 아니라 모든 awk에서 작동해야 함).

awk '$2 == "60" {print $1}' < file 

또는 grepsed:

grep -E '^[[:space:]]*[[:digit:]]+[[:space:]]+60[[:space:]]*$' < file |
   sed -e 's/^[[:space:]]*//' -e 's/[[:space:]].*//'

60해당 쌍이 있는 행을 포함하지만 정확히 제외하려는 일반적인 경우에 대한 awk의 추악한 한 줄 설명은 다음과 같습니다 72,96.

awk 'function f(n) { return ($2 ~ "(^|,)" n "(,|$)") }
     f(60) && ! (f(72) && f(96)) {print NR, $1}' < file 

이 함수는 두 번째 필드의 숫자 목록 내에 f(n)있는지 확인합니다 n(숫자가 쉼표 또는 필드의 시작/끝으로 구분되어 있다고 가정). 그런 다음 그것이 존재하는지 확인 60하고 쌍이 72,96존재하지 않습니다. 출력은 줄 번호( NR)와 첫 번째 필드이지만 필요하지 않은 경우 줄 번호를 쉽게 제거할 수 있습니다.

답변3

노력하다:

$ cat infile
63 41,3,11,12 
  1 31,60,72,96 
  7 41,3,31,14,15,68,59,60 
  7 60,72,96 
  7 60 
  1 41,3,31,31,14,15,68,59,60 
  60 41,3,115,12,13,66,96 
  1 41,3,11,12,13,66,96   7 60,72,96 
  7 60 
3 601
 2 60,72,962
5 60,3
43 60   
3 52360

$ grep -oP '^\s*[0-9]+(?= 60\s*$)' infile
  7
  7
43   

설명하다:

grep -P '^             # grep from start of line
\s*                    # followed by optional spaces
[0-9]+                 # followed by some decimal digits
(?= 60\s*$)            # That have a <space>60<space(s)><end of line>
                       # but do not capture the 60.
' infile

답변4

awk쉼표를 사용하여 공백으로 구분된 두 번째 필드를 구분할 수 있습니다 . 필드를 분할한 결과가 여러 개의 단일 값인 경우 의미가 없습니다. 그렇지 않고 60인 경우 공백으로 구분된 첫 번째 필드를 인쇄합니다.

awk 'split($2, a, ",") == 1 && $2 == 60 { print $1 }' <file

주어진 예제 데이터의 경우 가 인쇄됩니다 7.

관련 정보