如何削减前n和后n列?

如何从制表符分隔的文件中切断第n个和最后n个列?

我试过这个切第n列。 但我不知道结合第一个和最后一个列

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

Cut可以在-f中使用几个范围:

最多4列和7列以上的列:

cut -f -4,7-

或从1,2,5,6和从10开始:

cut -f 1,2,5,6,10-

等等

使用AWK来切断第一个和最后一个字段:

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

不幸的是,那离开了现场分隔,所以

 aaa bbb ccc 

 [space]bbb[space] 

为了做到这一点,使用kurumi的答案,这将不会留下额外的空间,但以一种特定于您的要求的方式:

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

这也解决了这个问题中的一些问题。

概括地说:

 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 

然后,可以通过在命令开始处更改variables赋值来更改开始或结束跳过的字段数。

你可以使用Bash:

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

你可以使用awk,例如,截断第一,第二和最后3列

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

如果你有一个编程语言,比如Ruby(1.9+)

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

尝试以下操作:

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