2009-08-04 41 views
8

Tôi có một file có tên ip-list với hai cột:cách thanh lịch để đảo ngược thứ tự cột

IP1 <TAB> Server1 
IP2 <TAB> Server2 

Và tôi muốn sản xuất:

Server1 <TAB> IP1 
Server2 <TAB> IP2 

thanh lịch nhất, ngắn nhất công cụ Linux dòng lệnh để là gì làm đi?

+0

Nền tảng nào? Windows, Unix, Max. . . –

+0

Đã thêm "Linux". Cảm ơn. –

Trả lời

12

Sử dụng awk:

awk '{print $2,$1}' ip-list 

Điều đó sẽ cung cấp cho bạn những gì bạn muốn.

+2

Cần lưu ý rằng nó mang lại kết quả như phân tách bằng dấu cách, nhưng nó khá tầm thường để chèn thoát khỏi tab nếu bạn cần. –

3

Giải pháp đơn giản nhất là:

 
awk '{print $2 "\t" $1}' 

Tuy nhiên, có một số vấn đề. Nếu có thể có khoảng trắng ở một trong các lĩnh vực, bạn cần làm một trong số: (tùy thuộc vào nếu awk của bạn hỗ trợ -v)

 
awk -v FS='\t' '{print $2 "\t" $1}' 
awk 'BEGIN{ FS="\t" } {print $2 "\t" $1}' 

Ngoài ra, bạn có thể làm một trong số:

 
awk -v OFS='\t' '{print $2,$1}' 
awk 'BEGIN{ OFS="\t" } {print $2,$1}' 
awk -v FS='\t' -v OFS='\t' '{print $2,$1}' # if allowing spaces in fields 

Một trong các bình luận hỏi, 'tên tập tin đi đâu'? awk được sử dụng làm bộ lọc, vì vậy nó thường xuất hiện dưới dạng:

 
$ some-cmd | awk ... | other-cmd 

không có tên tệp nào được cung cấp. Hoặc, một tên tập tin có thể được cho là một cuộc tranh cãi sau khi tất cả các lệnh:

 
$ awk ... filename 
+0

Tên tệp ở đâu? –

0

perl -pi -e 's/^([^\t]+)\t([^\t]+)$/\2\t\1/' yourfile.csv

perl -pi -e 'split("\t"); print "$_[1]\t$_[0]"'

Người đầu tiên có thể hoạt động trên sed, quá.

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