给定的输入使用剪切命令来删除多个列
echo 1,2,3,4,5,6,7,8,9,...100
如果我希望削减列5我可以做
cut -d, -f-4,6-
如果我想削减多个不连续的列像5,7 ,等 有没有一个班轮?
给定的输入使用剪切命令来删除多个列
echo 1,2,3,4,5,6,7,8,9,...100
如果我希望削减列5我可以做
cut -d, -f-4,6-
如果我想削减多个不连续的列像5,7 ,等 有没有一个班轮?
您应该能够在现有-f
规范中直接继续序列。
要跳过两个5和7,尝试:
cut -d, -f-4,6-6,8-
当你跳过一个连续的列,这也可以写成:
cut -d, -f-4,6,8-
要保持下去,如果你想跳过5,7和11,你可以使用:
cut -d, -f-4,6-6,8-10,12-
为了使它更清晰的视角,它更容易可视化当您使用分别位于序列列表开头/结尾的开始/结束列时。举例来说,下面将打印列2至20中,跳过第5列和11:
cut -d, -f2-4,6-10,12-20
所以,这将打印 “2至4”,则跳过5中, “6至10”,则跳过11,然后“12至20”。
您可以使用了序列削减所有奇数/偶数列:
这将打印的所有奇数列
echo 1,2,3,4,5,6,7,8,9,10 | cut -d, -f$(seq -s, 1 2 10)
要打印所有偶数列,你可以使用
echo 1,2,3,4,5,6,7,8,9,10 | cut -d, -f$(seq -s, 2 2 10)
通过更改seq的第二个数字,您可以指定要打印的列。
如果要打印的列规格是比较复杂的,你也可以使用“一衬,如果从句”像
echo 1,2,3,4,5,6,7,8,9,10 | cut -d, -f$(for i in $(seq 1 10); do if [[ $i -lt 10 && $i -lt 5 ]];then echo -n $i,; else echo -n $i;fi;done)
这将打印从1到5的所有列 - 你可以简单地修改应创建条件以创建更复杂的条件来指定天气栏。
在Mac Os(达尔文)中使用: echo 1,2,3,4,5,6,7,8,9, 10 | cut -d,-f $(seq -s,1 2 10) 我得到这个错误 cut:[-cf] list:值可能不包括零 但是如果我运行: echo 1,2,3,4 ,5,6,7,8,9,10 |切-d,-f1,3,5,7,9, 错误消失。 有人可以试图解释这个吗?为什么如果使用seq给出这个错误? –
有时候更容易考虑排除哪些字段。
如果未被剪切的字段的数量(未保留在输出中)很小,则使用--complement
标记可能更容易,例如,包括所有领域1-20除了没有3,7,和12 - 做到这一点:
cut -d, --complement -f3,7,12 <inputfile
不是
cut -d, -f-2,4-6,8-11,13-
同样可以用Perl
完成,因为它使用0-基于索引代替1-基于索引,该字段的值由1
perl -F, -lane 'print join ",", @F[1..3,5..9,11..19]'
偏移相当于:
cut -d, -f2-4,6-10,12-20
如果不需要在输出中的逗号:
perl -F, -lane 'print "@F[1..3,5..9,11..19]"'
'6-6'可能有效,但更多的传统写作'6'。 –
@JonathanLeffler是的,我知道 - 但我在示例中保留了'6-6',表示使用更宽范围的列的样子。例如,如果OP想跳过5和10,他需要'-f-4,6-9,11-'。如果我将它折叠为“6”,这可能(或可能不会)可视化。但是,我编辑添加了一个连续列的例子 - 所以谢谢你的提示=] – newfurniturey