마지막 문자가 홀수이면 문자열을 인쇄합니다.

마지막 문자가 홀수이면 문자열을 인쇄합니다.

파일에 호스트 이름 목록이 있는데 마지막 문자를 기준으로 구분하고 싶습니다. 마지막 문자가 홀수이면 호스트 이름이 파일에 기록됩니다. 하나의 라이너로 어떻게 이 작업을 수행할 수 있습니까?

예:

abc123
abc124
abc348
abc435

원하는 출력:

abc123
abc435

답변1

짧은awk주문하다:

awk '/[13579]$/' file > hostnames_odd.txt
  • [13579]- 숫자(홀수) 목록을 허용하는 문자 클래스를 나타냅니다.
  • $- 문자열/라인의 끝

결과:

$ cat hostnames_odd.txt 
abc123
abc435

또는grep:

grep '[13579]$' file  > hostnames_odd.txt

일부 줄 끝에 공백이 있을 수 있는 경우 키 패턴을 다음과 같이 변경합니다.[13579][[:space:]]*$

답변2

여기 까다로운 트릭이 있습니다.필드 구분 기호를 빈 문자열로 설정, 각 문자가 필드가 되도록 합니다. 이렇게 하면 $NF짝수인지 홀수인지 확인할 수 있습니다 .

$ awk -F "" '$NF % 2' file
abc123
abc435

다른 데이터와 함께:

$ echo "23
... 24
... 25" | awk -F "" '$NF % 2'
23
25

답변3

마지막 문자 mod 2가 0이 아니면 읽은 줄을 인쇄합니다.

perl -wlne 'print $_ if ((substr $_, -1) % 2)' /path/to/file

관련 정보