如何在Miller的cut命令中使用位置字段名
用Miller CLI按字段序号截取记录的方法
你之前的猜测没错:$[[n]]这种位置字段名仅在put、filter这类支持Miller表达式的命令中可用,cut命令的-f参数不支持直接用位置序号。要实现按字段序号保留字段,可以用以下两种方法:
方法1:结合字段名获取命令与cut
先提取目标位置的字段名,再用cut保留该字段:
# 提取第2个字段的名称 target_field=$(echo s=green,t=red,a=3,b=4 | mlr --nidx head -n 1 | tr ',' '\n' | sed -n '2p') # 用cut保留该字段 echo s=green,t=red,a=3,b=4 | mlr cut -f "$target_field"
执行后会输出:t=red
方法2:用put命令直接操作位置字段
利用put支持位置引用的特性,保留指定位置的字段并删除其他字段:
echo s=green,t=red,a=3,b=4 | mlr put ' # 遍历所有字段位置,保留第2个,删除其余 for (idx, name in @[]) { if (idx != 2) { unset @[idx]; } } '
同样会输出:t=red
如果要保留多个位置的字段(比如第2、4个),只需修改判断条件为if (idx not in [2,4])即可。
内容的提问来源于stack exchange,提问作者Gruber
相关产品推荐
相关产品推荐

