给定输入
echo 1,2,3,4,5,6,7,8,9,...100
如果我想削减第5列,我可以做
cut -d, -f-4,6-
如果我想要切割多个非连续的列,如5,7等,那么会有一个内衬吗?
new*_*rey 89
您应该能够在现有-f规范中直接继续序列.
要跳过5和7,请尝试:
cut -d, -f-4,6-6,8-
Run Code Online (Sandbox Code Playgroud)
当您跳过单个连续列时,这也可以写为:
cut -d, -f-4,6,8-
Run Code Online (Sandbox Code Playgroud)
为了让它继续下去,如果你想跳过5,7和11,你会使用:
cut -d, -f-4,6-6,8-10,12-
Run Code Online (Sandbox Code Playgroud)
更简单地说,当您使用分别位于序列列表开头/结尾的开始/结束列时,可以更容易地进行可视化.例如,以下内容将打印第2列到第20列,跳过第5列和第11列:
cut -d, -f2-4,6-10,12-20
Run Code Online (Sandbox Code Playgroud)
因此,这将打印"2到4",跳过5,"6到10",跳过11,然后"12到20".
Chr*_*son 17
有时,根据要排除的字段进行思考会更容易.
如果未剪切的字段数(未在输出中保留)很小,则可能更容易使用该--complement标志,例如包括除了3,7和12之外的所有字段1-20 - 执行以下操作:
cut -d, --complement -f3,7,12 <inputfile
Run Code Online (Sandbox Code Playgroud)
而不是
cut -d, -f-2,4-6,8-11,13-
Run Code Online (Sandbox Code Playgroud)
sge*_*sge 12
您可以使用seq剪切所有奇数/偶数列:
这将打印所有奇数列
echo 1,2,3,4,5,6,7,8,9,10 | cut -d, -f$(seq -s, 1 2 10)
Run Code Online (Sandbox Code Playgroud)
要打印所有可以使用的偶数列
echo 1,2,3,4,5,6,7,8,9,10 | cut -d, -f$(seq -s, 2 2 10)
Run Code Online (Sandbox Code Playgroud)
通过更改第二个seq数,您可以指定要打印的列.
如果要打印的列的规范更复杂,您也可以使用"one-liner-if-clause"之类的
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)
Run Code Online (Sandbox Code Playgroud)
这将打印从1到5的所有列 - 您可以简单地修改条件以创建更复杂的条件以指定要打印列的天气.
| 归档时间: |
|
| 查看次数: |
115526 次 |
| 最近记录: |