我怎样才能切断第一ñ最后ñ从制表符分隔文件列?
我试过这个来削减前n列.但我不知道将第一列和最后一列结合起来
cut -f 1-10 -d "<CTR>v <TAB>" filename
Run Code Online (Sandbox Code Playgroud)
kau*_*ppi 100
切割可以采用以下几个范围-f:
最多4列和7列以后的列:
cut -f -4,7-
Run Code Online (Sandbox Code Playgroud)
或者对于字段1,2,5,6和从10开始:
cut -f 1,2,5,6,10-
Run Code Online (Sandbox Code Playgroud)
等等
你问题的第一部分很简单。正如已经指出的, cut 接受省略列范围的起始或结束索引,将其解释为 \xe2\x80\x9c 从开始到第n列(包括)\xe2\x80\x9d 或 \xe2\ x80\x9c从第n列(含)到末尾,分别为\xe2\x80\x9d:
\n\n$ printf 'this:is:a:test' | cut -d: -f-2\nthis:is\n$ printf 'this:is:a:test' | cut -d: -f3-\na:test\nRun Code Online (Sandbox Code Playgroud)\n\n它还支持组合范围。例如,如果您想要 7 列的行中的前 3 列和最后 2 列:
\n\n$ printf 'foo:bar:baz:qux:quz:quux:quuz' | cut -d: -f-3,6-\nfoo:bar:baz:quux:quuz\nRun Code Online (Sandbox Code Playgroud)\n\n然而,你的问题的第二部分可能有点棘手,具体取决于你期望的输入类型。如果 \xe2\x80\x9clast n列\xe2\x80\x9d 你的意思是 \xe2\x80\x9clast n列(无论它们在整个行中的索引)\xe2\x80\x9d (即因为你不\xe2\ x80\x99 不一定知道你\xe2\x80\x99 将提前找到多少列),那么遗憾的是,cut单独使用这是不可能完成的。为了有效地使用cut拉出\xe2\x80\x9c每行中的最后n列\xe2\x80\x9d,必须事先知道每行中存在的列总数,并且每行的数量必须一致它包含的列数。
如果您不知道每行中可能存在多少个 \xe2\x80\x9ccolumns\xe2\x80\x9d (例如,因为您\xe2\x80\x99 正在处理非严格表格的输入),那么您\xe2\ x80\x99ll 必须使用类似的东西awk。例如,用于awk提取最后 2 个 \xe2\x80\x9ccolumns\xe2\x80\x9d (awk 称它们为字段,每行的数量可能不同):
$ printf '/a\\n/a/b\\n/a/b/c\\n/a/b/c/d\\n' | awk -F/ '{print $(NF-1) FS $(NF)}'\n/a\na/b\nb/c\nc/d\nRun Code Online (Sandbox Code Playgroud)\n