열 내의 소수 자릿수 반올림/잘림

열 내의 소수 자릿수 반올림/잘림

awk의 printf나 심지어 bash의 printf를 사용하여 열의 모든 숫자를 소수점 이하 한 자리로 반올림하는 깔끔한 방법이 많이 있는 것 같습니다. 그러나 열의 모든 숫자를 소수점 이하 한 자리로 줄이는(반올림하지 않고) 똑같이 쉬운 방법을 찾을 수 없습니다. 지금까지 정렬하는 가장 쉬운 방법은 소수점 이하 두 자리로 반올림한 다음 열 1에 있는 각 행의 마지막 문자를 제거하는 것입니다. 누구든지 더 좋은 방법이 있습니까? 입력 및 출력의 예는 다음과 같습니다.

입력하다

123.434    
1456.8123  
2536.577    
345.95553  
23643.1454  

산출

123.4    
1456.8  
2536.5    
345.9  
23643.1 

답변1

작업하기가 매우 쉽습니다.grep

$ cat ip.txt 
123.434
1456.8123
2536.577
345.95553
23643.1454    

$ grep -o '^[0-9]*\.[0-9]' ip.txt 
123.4
1456.8
2536.5
345.9
23643.1
  • ^줄의 시작
  • [0-9]*0개 이상의 숫자
  • \.리터럴 도트 문자 일치
  • [0-9]숫자와 일치
  • -o옵션 으로 인해 grep일치하는 부분만 인쇄되어 나머지 문자는 효과적으로 제거됩니다.

추가 열이 있는 경우sed

$ cat ip.txt 
123.434 a
1456.8123 b
2536.577 c
345.95553 d
23643.1454 e

$ sed -E 's/^([0-9]*\.[0-9])[0-9]*/\1/' ip.txt
123.4 a
1456.8 b
2536.5 c
345.9 d
23643.1 e
  • -E확장 정규식 사용
  • 필요한 패턴은 교체 구간에 캡쳐하여 ()사용\1
  • [0-9]*캡처 그룹이 삭제된 후

추가 자료:

관련 정보