2012-04-03 40 views

Trả lời

35

Bạn đang in kết quả của gsub, nhưng gsub thực hiện sửa đổi tại chỗ $2 thay vì trả lại bản sửa đổi. Gọi gsub, sau đó in:

awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}' 
14

(Tôi không có đủ điểm để nhận xét về các câu trả lời trước trực tiếp.)

Để cắt khoảng trắng tại cuối của $2 sử dụng:

awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}' 

Để cắt khoảng trắng tại bắt đầu của $2 sử dụng:

awk -F\, '{gsub(/^[ \t]+/, "", $2); print $2 ":"}' 

Và đối với cả hai kết thúc và bắt đầu:

awk -F\, '{gsub(/^[ \t]+/, "", $2); gsub(/[ \t]+$/, "", $2); print $2 ":"}' 
+1

Trông thứ ba dòng có thể được viết tắt là 'awk -F \,' {gsub (/^[\ t] + | [\ t] + $) /, "", $ 2); in $ 2 ":"} ''. Tâm trí rằng dấu hiệu ống mạnh mẽ! :) – syntaxerror

28

Những chức năng có ích để cải thiện khả năng đọc. Họ cũng trả lại kết quả tỉa:

function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s } 
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s } 
function trim(s) { return rtrim(ltrim(s)); } 
BEGIN { 
# whatever 
} 
{ 
# whatever 
} 
END { 
# whatever 
} 

Nguồn: https://gist.github.com/andrewrcollins/1592991

+0

cảm ơn! như bạn đã nói, mã của tôi trở nên dễ đọc. – haper

3

Một lót cho gawk:

gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}' 
1

LTRIM và RTRIM trong Unix

awk 'BEGIN{FS=OFS="|"} {gsub(/^[ \t]+|[ \t]+$/, "", $2)}1' filename.txt

Các vấn đề liên quan