파일에서 문자열 뒤의 정수 값을 찾습니다.

파일에서 문자열 뒤의 정수 값을 찾습니다.

파일에서 특정 문자열 다음에 정수 값을 가져와서 모든 정수를 정렬하고 싶습니다. 예 - 문자열 무게가 있는 수천 줄의 파일이 있습니다.

-weight 100
-weight 200
-weight 20

모든 정수 값을 정렬된 순서로 가져오고 싶습니다.

답변1

줄의 마지막 항목인 가장 긴 숫자 문자열을 검색하는 경우 다음을 사용할 수 있습니다 grep.

$ grep -oP '\d+\s*$' file 
100
200
20

행의 일치하는 부분만 인쇄하도록 지시하고 Perl -o호환 정규식을 활성화합니다. PCRE를 사용 하면 "하나 이상의 숫자"와 "0개 이상의 공백 문자"에 사용할 수 있습니다 . 따라서 이 명령은 모두 함께 줄 끝에 있는 가장 긴 숫자를 인쇄합니다.grep-P\d+\s*

정렬이 필요한 경우 다음을 통과하세요 sort.

$ grep -oP '\d+\s*$' file | sort -n
20
100
200

대신 특정 문자열을 사용하여 패턴을 고정해야 하는 경우 다음을 사용하세요.

$ grep -oP -- '-weight\s+\K\d+' file | sort -n
20
100
200

이 지점까지 일치하는 항목을 포함하지 않도록 지시하므로 위의 명령은 0 이상의 공백 뒤에 있는 가장 긴 숫자만 인쇄 \K합니다 .grep-weight

음수나 소수도 포함하려면 다음이 필요합니다.

grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n

예를 들어:

$ cat file 
-weight 100
-weight 200
-weight 20
-weight -29
-weight -32.4

$ grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n
-32
-29
20
100
200

답변2

이 시도:

cut -d ' ' -f2 inputfile|sort -n

-d ' '- 구분 기호를 공백으로 설정
-f2- 두 번째 열 가져오기
sort -n- 결과를 숫자로 정렬
테스트 결과:

20
100
200

답변3

다음 sed 명령을 사용해 보세요:

sed -E 's/^.*weight\s([[:digit:]]*).*/\1/' sort.txt  | sort -n

또는

sed -E 's/.*weight\s([0-9]*).*/\1/' sort.txt | sort -n

테스트 사례:

-weight 100 
-weight 200 
-weight 20

결과:

20
100 
200

참고:- 당신이 좋은 테스트 사례를 제공하지 않았기 때문에 나는 내 것으로 가정했습니다.

정보:

  • ^.*weight\s([[:digit:]]): 각 줄을 읽고 "weight"라는 단어 뒤의 숫자와 "space"를 캡처하세요.
  • | sort -n: 출력을 sort 명령으로 파이프하고 숫자 값을 기준으로 정렬합니다.

관련 정보