bash - 填写层次表
问题描述
我有下表:
B categoryA
C cateogoryB
D categoryC descC1
E item1 desc1
E item2 desc3
E item3 desc4
E item4 desc5
E item5 desc6
它是一个制表符分隔的表格,介于item
两个desc
空白字符之间。
现在我想在 bash 中自动填写这个表,这样一个类别下面的每个选项卡都被替换为值,直到有一个新的类别。
这是我想要的输出:
E categoryA cateogoryB categoryC descC2 item1 desc1
E categoryA cateogoryB categoryC descC3 item2 desc3
E categoryA cateogoryB categoryC descC4 item3 desc4
E categoryA cateogoryB categoryC descC5 item4 desc5
E categoryA cateogoryB categoryC descC6 item5 desc6
如何使用 bash 完成此任务?
我开始将表格修改为完全制表符分隔 ( sed 's/^B /B\t/g' ko00002_mod.keg | sed 's/^C /C\t\t/g' | sed 's/^D /D\t\t\t/g' | sed 's/^E /E\t\t\t\t/g'
,但我不知道可以填写表格的命令。
解决方案
$ cat tst.awk
BEGIN { FS=OFS="\t" }
{
for (i=1; i<=NF; i++) {
if ($i ~ /[^[:space:]]/) {
def[i] = ($i ~ /[^[:space:]]/ ? $i : def[i])
}
else {
$i = def[i]
}
}
}
/^E/ {
split($(NF-1),tmp," ")
sub(/[0-9]+$/,"",tmp[2])
$(NF-1) = tmp[1] " " tmp[2] (++cnt) + 1
print
}
$ awk -f tst.awk file
E categoryA cateogoryB categoryC descC2 item1 desc1
E categoryA cateogoryB categoryC descC3 item2 desc3
E categoryA cateogoryB categoryC descC4 item3 desc4
E categoryA cateogoryB categoryC descC5 item4 desc5
E categoryA cateogoryB categoryC descC6 item5 desc6
推荐阅读
- mobile-safari - 在 Safari 中全屏
- reactjs - 两个从属日期选择器,其中开始日期永远不能大于结束日期
- javascript - 如何检测应用程序中按下的键盘组合?
- amazon-web-services - CloudFormation 中更新和导入的区别
- python - Geopandas:保存为csv时如何指定数据类型?
- json - 没有键的结构/映射数组
- json - 如何在 API 调用完成后和组件呈现之前更新状态
- php - 检查数据库中是否有另一个用户名不起作用
- java - 不能在模仿 ArrayList 工作方式的类中的两个数组之间使用相等运算符
- r - 找到存在/不存在变量和定量变量之间的统计检验