텍스트 파일 입력 필터링

텍스트 파일 입력 필터링

저는 Raspberry Pi(raspbian 실행)를 사용하고 있으며 다음을 통해 값을 텍스트 파일로 계속 출력하는 쉘 스크립트가 있습니다.

wavemon -d |grep -i signal >> textfile.txt

출력은 다음과 같습니다.

signal level: 20 dBm (100.00mW)

질문: 다른 단어를 제거하는 방법(신호 레벨: dBm(100.00mW))를 입력한 다음 텍스트 파일에 숫자(20)만 표시되도록 텍스트 파일에 숫자를 입력합니까?

답변1

그리고 grep:

wavemon -d | grep -oP 'signal level: \K[0-9]+'
  • -o일치하는 부분만 인쇄
  • -PPerl 호환 정규식 PCRE 활성화( \K)
  • signal level: \K[0-9]+패턴을 검색 signal level:하면 \K는 일치 항목의 시작 부분을 현재 위치로 재설정하고 [0-9]+하나 이상의 숫자와 일치합니다.

답변2

cut다음과 같이 프로그램을 사용할 수 있습니다 .

cat textfile.txt | cut -d':' -f2 | cut -d' ' -f2

작동 방식은 다음과 같습니다.

signal level: 20 dBm (100.00mW)먼저 옵션을 사용하여 구분 기호 "콜론"으로 텍스트를 분할한 -d':'다음 옵션을 사용하여 두 번째 필드를 가져옵니다 -f2.

그런 다음 결과를 구분 기호 "공백"으로 분할 20 dBm (100.00mW)하고 두 번째 필드를 다시 가져옵니다.

답변3

awk이러한 필드가 모두 신뢰할 수 있다고 가정하면 다음을 사용할 수 있습니다.

wavemon -d | awk -v IGNORECASE=1 '$1 ~ /signal/ {print $3}' >> textfile.txt

또는 파일이 이미 생성되었기 때문에 필터링만 하려는 경우

cut -f3 -d " " textfile.txt

답변4

Raspberry Pi를 사용하고 있으므로 Python 방식으로 수행할 수 있습니다.

import re
w=open("newfile.txt",'w')
with open('textfile.txt') as f:
    a=re.findall(r'\d+',f.readline())
    w.write(a[0])

관련 정보