2011-06-30 46 views
12

Tệp này có 3 trường. Tôi muốn ví dụ 2 lĩnh vực đầu tiên trong màu xanh lá cây, và thứ ba trong trắng (NB: nền đen), vì vậy tôi cố gắng:Làm thế nào để in kết quả của awk với các màu khác nhau cho các trường khác nhau?

awk '{print "\033[0;32m"$1"\033[0m", "\033[0;32m"$2"\033[0m", "\033[0;37m"$3"\033[0m"} }' chrono.txt 

và tất cả mọi thứ là màu xanh lá cây ...

Làm thế nào tôi phải tiến hành (nếu có thể)?

Trả lời

26

Để có được kết quả màu sắc từ lúc này, bạn có thể sử dụng phương pháp này.

function red(s) { 
    printf "\033[1;31m" s "\033[0m " 
} 

function green(s) { 
    printf "\033[1;32m" s "\033[0m " 
} 

function blue(s) { 
    printf "\033[1;34m" s "\033[0m " 
} 

{ 
    print red($1), green($2), blue($3) 
} 
+0

cảm ơn bạn rất nhiều, nó hoạt động rất đẹp – ThG

+0

@ThG vui vì tôi có thể giúp :-) –

+7

Hãy cẩn thận với các chức năng này. Họ đang sử dụng chuỗi bên ngoài làm trình định dạng định dạng. Nếu chuỗi chứa các ký tự định dạng (%, v.v.), nó sẽ thất bại. Sử dụng tốt hơn một cái gì đó như 'hàm màu đỏ (chuỗi) { printf ("% s% s% s "," \ 033 [1; 31 m ", chuỗi," \ 033 [0m "); } ' –

0

Cách thay thế cho việc sử dụng chức năng awk là chuyển màu trong biến shell. Ví dụ.

RED='\033[01;31m' 
GREEN='\033[01;32m' 
YELLOW='\033[01;33m' 
BLUE='\033[01;34m' 

echo "Col1 Col2 Col3 Col4" | \ 
awk -v r=$RED -v y=$YELLOW -v g=$GREEN -v b=$BLUE -v n=$NONE \ 
'{printf r$1n y$2n g$3n b$4n "\n"}' 
Các vấn đề liên quan