如何削减前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=""