2011-02-10 33 views
53

Làm cách nào để tôi có thể cắt bớt nn cột cuối cùng từ một tệp được phân tách bằng tab?Làm thế nào để cắt đầu tiên n và cột n cuối cùng?

Tôi đã cố gắng điều này để cắt cột n đầu tiên. Nhưng tôi không có ý tưởng để kết hợp đầu tiên và cột n cuối cùng

cut -f 1-10 -d "<CTR>v <TAB>" filename 

Trả lời

78

Cut có thể mất vài dãy trong -f:

Cột lên đến 4 và từ 7 trở đi:

cắt -f -4,7-

hoặc cho các lĩnh vực 1,2,5,6 và từ 10 trở đi:

cắt -f 1,2,5, 6,10-

vv

+7

Nó wor ks tốt hơn nhiều với một dấu phân cách ....... cut -d '' -f -2 <<< 'Đây là một thử nghiệm' – Yogamurthy

-1

bạn có thể sử dụng awk, ví dụ, cắt đứt 1, 2 và 3 cột cuối cùng

awk '{for(i=3;i<=NF-3;i++} print $i}' file 

nếu bạn có một ngôn ngữ lập trình như vậy Ruby (1.9+)

$ ruby -F"\t" -ane 'print $F[2..-3].join("\t")' file 
2

để sử dụng AWK để cắt đứt các lĩnh vực đầu tiên và lần cuối:

awk '{$1 = ""; $NF = ""; print}' inputfile 

Thật không may, đó rời tách lĩnh vực, vì vậy

aaa bbb ccc 

trở thành

[space]bbb[space] 

Để thực hiện điều này bằng câu trả lời Kurumi của đó sẽ không rời khỏi không gian thêm, nhưng theo một cách đó là cụ thể cho các yêu cầu của bạn:

awk '{delim = ""; for (i=2;i<=NF-1;i++) {printf delim "%s", $i; delim = OFS}; printf "\n"}' inputfile 

Điều này cũng khắc phục một số vấn đề trong câu trả lời đó.

Để khái quát rằng:

awk -v skipstart=1 -v skipend=1 '{delim = ""; for (i=skipstart+1;i<=NF-skipend;i++) {printf delim "%s", $i; delim = OFS}; printf "\n"}' inputfile 

Sau đó, bạn có thể thay đổi số lĩnh vực để bỏ qua ngay từ đầu hoặc kết thúc bằng cách thay đổi các bài tập biến vào đầu của lệnh.

-1

Hãy thử như sau:

echo a#b#c | awk -F"#" '{$1 = ""; $NF = ""; print}' OFS="" 
0

Bạn có thể sử dụng Bash cho rằng:

while read -a cols; do echo ${cols[@]:0:1} ${cols[@]:1,-1}; done < file.txt 
0

Bạn có thể cắt sử dụng sau,
-d: delimiter, -f cho các lĩnh vực
\ t được sử dụng cho các trường được phân tách bằng tab

cut -d$'\t' -f 1-3,7- 
Các vấn đề liên quan