이름이 특정 문자로 시작하는 파일에서 줄 추출

이름이 특정 문자로 시작하는 파일에서 줄 추출

여기서는 다음과 같은 열 목록을 얻습니다.

59  LOUIS   1202    +1
60  FREDDIE 1201    +4
61  FINLAY  1200    -2
62  LEON    1137    +12
63  HARLEY  1132    +6
64  DAVID   1127    -1
65  MOHAMMAD1100    +6
66  REECE   1095    -1
67  KIAN    1090    0
68  KAI     1056    -6
69  KYLE    1030    -18
70  BRANDON 1011    -4
71  HAYDEN  1006    +5
72  ZACHARY 995     +10
73  KIERAN  973     -12
73  LUCA    973     -1
75  ASHTON  954     +4
76  BAILEY  939     -6
77  JAKE    913     +10
78  GABRIEL 910     +14
79  SAM     900     -2
80  EVAN    890     0
81  BRADLEY 847     -13

다음과 같이 문자 "L"이 있는 행만 추출하려면 어떻게 해야 합니까?

73  LUCA    973     -1

답변1

awk '$2 ~ /^L/' file

정규식을 사용하여 두 번째 필드를 테스트 awk하고 일치하는 줄을 인쇄하도록 지시합니다.$2~^L

정규식은 ( $2) 형식의 두 번째 필드와 일치합니다.^L

답변2

@bu5hman의 답변에 따르면 awk를 사용하면 문자를 인수로 쉽게 전달할 수 있습니다.

awk -v letter="L" 'substr($2, 1, 1) == letter' file
# or with a constructed regex
awk -v letter="L" '$2 ~ "^" letter' file

답변3

이것은 중복된 것처럼 보이지만 어쨌든 이해한다면 다음과 같이 할 수 있습니다.

먼저 목록을 일부 nameslist.txt파일에 저장한 후 다음을 수행합니다.

sed -rn '/^[^\s]+\s+[F]/p' list.txt > result.txt, result.txt파일에 다음 출력이 반환되어야 합니다.

60 FREDDIE 1201 +4 61 FINLAY 1200 -2

답변4

또 다른 grep 예:

grep -E "[0-9]+ +L" file

+는 하나 이상의 이전 문자와 일치하므로 이 경우에는 최소한 하나의 숫자와 최소한 하나의 공백, 그 뒤에 대문자 L이 따라옵니다.

-E에서는 +를 리터럴 "+"가 아닌 특수 문자로 해석해야 합니다.

산출:

59  LOUIS   1202    +1
62  LEON    1137    +12
73  LUCA    973     -1

관련 정보