Bash从列名中检索列号
发布时间:2020-12-15 22:25:09 所属栏目:安全 来源:网络整理
导读:有没有更好的方法(例如AWK中的一个班轮)我可以在列表名称中使用标题获取列号?我希望能够独立于列号的实际处理列(例如,当添加另一列时,脚本不需要更改). 例如,给定“table.tsv”中的下表: ID Value Target Not Used1 5 9 112 4 8 123 6 7 10 我可以使用以下
有没有更好的方法(例如AWK中的一个班轮)我可以在列表名称中使用标题获取列号?我希望能够独立于列号的实际处理列(例如,当添加另一列时,脚本不需要更改).
例如,给定“table.tsv”中的下表: ID Value Target Not Used 1 5 9 11 2 4 8 12 3 6 7 10 我可以使用以下方法对“目标”列进行排序: #!/bin/bash (IFS=$'t'; read -r; printf "%sn" "$REPLY"; i=0; for col in $REPLY; do ((++i)) [ "$col" == "Target" ] && break done; sort -t$'t' "-k$i,${i}n") < table.tsv 有没有办法没有for循环(或至少清理一下)? 给定脚本的预期输出是: ID Value Target Not Used 3 6 7 10 2 4 8 12 1 5 9 11 但是,我试图给出一个我想要做的事情的例子.我想通过几个程序传递/过滤我的表,因此应保留标题和所有列:只需在每一步进行处理. print headings from stdin i=$(magic to determine column position given "Target") sort -t$'t' "-k$i,${i}n" # or whatever processing is required on that column 解决方法
另一种有很多管道的替代品
$head -1 table | tr -s ' ' 'n' | nl -nln | grep "Target" | cut -f1 提取第一行,转置,数字行,查找列名,提取数字 或者,拯救! $awk -v RS='t' '/Target/{print NR; exit}' file.tsv 3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |