Cách sử dụng Awk để định dạng số với dấu phân cách hàng nghìn


8

Ai đó có thể cho tôi biết cách sử dụng lệnh awk cho câu lệnh này "số sẽ chứa dấu phẩy sau mỗi ba chữ số. Ví dụ: 100000000 sẽ trở thành 100.000.000."

Tôi biết cách sử dụng lệnh sed để có được đầu ra này nhưng tôi không biết cách sử dụng awk, tôi là người mới bắt đầu, xin vui lòng cho tôi biết tôi đang tìm kiếm từ sáng nhưng tôi không nhận được câu trả lời phù hợp cho việc này vì vậy hãy đề nghị tôi hướng dẫn tốt nhất cho việc học.

lệnh sed để có được đầu ra trên:

echo "100000000" | sed -E 's/([0-9]{3})/,\1/2g'

1
Bạn đang sử dụng thuật ngữ tìm kiếm nào? Hãy thử "hàng ngàn dấu phân cách". FYI GNU awk có một sửa đổi định dạng printf
steeldriver

2
sedLệnh của bạn không làm những gì bạn nghĩ. Nó chỉ hoạt động với các số có 9 chữ số ...
don_crissti

thuật ngữ tìm kiếm là viết tắt của "để tìm kiếm trên internet để giải quyết vấn đề này"
Error3735

Ổn thỏa! Tôi đã thấy nó sẽ hoạt động chỉ với 9 chữ số và tôi muốn có cùng một đầu ra cho cùng một số nhưng bằng cách sử dụng awk, bạn có thể giúp tôi không?
Lỗi3735

Câu trả lời:


13

Một giải pháp độc lập với miền địa phương với định dạng thủ công

Điều này sẽ hoạt động trên mọi hệ điều hành tương thích POSIX bất kể các địa điểm được cài đặt.

$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| awk '{ len=length($0); res=""; for (i=0;i<=len;i++) { res=substr($0,len-i+1,1) res; if (i > 0 && i < len && i % 3 == 0) { res = "," res } }; print res }'
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000

Một giải pháp sử dụng printfvà miền địa phương en_US.

Trình printftự %'din một số nguyên thập phân được định dạng bằng dấu phân cách hàng nghìn của miền địa phương hiện tại.

$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| LC_ALL=en_US.UTF-8 awk '{ printf("%'"'"'d\n", $0) }'
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.