2012-01-23 42 views
6

Tôi muốn chọn một số cột trong một tệp và chạy một số lệnh trên đó. nên kịch bản của tôi là thế nàyLàm cách nào để chọn một số cột có AWK?

awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$19}' test.txt > outpot.txt 

nhưng in này nó vào tập tin khác và tôi đã cố gắng để làm điều này

awk '{print $1,$2,$3,$4,$5,$6,$7,$9,$10,$11,$12,$13,$14,$15,$16}' test.txt | next commands 

(Câu lệnh này hoạt động tốt! Tôi đã phạm sai lầm và tôi không biết làm thế nào để xóa câu hỏi này)

có thể làm cho lệnh này ngắn hơn thay vì viết tất cả các cột chỉ viết $1-7 && $9-15 && $19 (nhưng điều này không thực sự quan trọng tôi chỉ tự hỏi nếu có thể). Điều quan trọng là để có thể lựa chọn mà cột

+0

bạn nói nó không hiệu quả, nhưng theo cách nào? bạn đã nhận được một lỗi? –

+1

ya Tôi gặp lỗi cú pháp. nó có thể là lỗi của lệnh tiếp theo của tôi không? nhưng lệnh đó hoạt động hoàn hảo với lệnh này khi đang cầu xin! – mahmood

+0

lỗi là gì? –

Trả lời

2

cập nhật dựa trên glennjackman's gợi ý:

awk '{for (i=1;i<=NF;i++) if ((1<=i && i<=7) || (9<=i && i<=15) || i==19) printf("%s ", $i); print ""}' file 
+1

'i' là một số nguyên. Tại sao so sánh regex? –

+0

Cảm ơn @glennjackman. Bạn đã đúng, nhưng tôi đã không thể làm nhiều so sánh nguyên trong 'if'. Bạn muốn giới thiệu gì? –

+1

'if ((1 <= i && i <= 7) || (9 <= i && i <= 15) || i == 19) printf"% s% s "$ i FS' –

2

Để trả lời một phần của câu hỏi của bạn, trong kịch bản awk bạn có thể làm:

{ 
    for (i=1; i<=7; i++) 
     print $i; 
    for (i=9; i<=15; i++) 
     print $i; 
    print $19; 
} 
Các vấn đề liên quan