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

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

awk의 printf나 심지어 bash의 printf를 사용하여 열의 모든 숫자를 소수점 이하 1자리로 반올림하는 깔끔하고 간단한 방법이 많이 있는 것 같습니다. 그러나 열의 모든 숫자를 소수점 이하 1자리로 줄이는(반올림하지 않는) 똑같이 간단한 방법을 찾을 수 없습니다. 현재 이를 정렬하는 가장 간단한 방법은 소수점 이하 2자리로 반올림한 다음 열 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]*캡처 그룹이 삭제된 후

추가 자료:

관련 정보