如何在awk中切割字段并对比首个字段生成期望的输出列
实现方案
直接修改你的awk命令即可,完整命令如下:
awk '{ split($0, arr, "/"); # 第一个全大写字段转小写作为匹配目标 target = tolower(arr[1]); prefix = arr[1]; # 从第二个路径分段开始遍历找匹配项 for(i=2; i<=length(arr); i++){ prefix = prefix "/" arr[i]; if(index(arr[i], target) != 0){ break; } } # 输出原行、首字段、匹配到的前缀,可自行调整\t为对应数量的空格修改列间隔 print $0 "\t" arr[1] "\t" prefix; }' input > output
逻辑说明
- 先用
split按/分割整行内容到数组arr,arr[1]就是每行第一个全大写字段 - 把
arr[1]转成全小写作为匹配关键词target - 从第二个路径分段开始遍历,每遍历一段就拼到前缀变量
prefix里,当当前分段包含target时停止遍历 - 最后按要求输出三列内容即可
输出验证
运行上述命令后输出结果和你期望的完全一致:
ADC1/asf/sd/df_adc1/125125 ADC1 ADC1/asf/sd/df_adc1 AED1/asf/sd/df_aed1/asfk AED1 AED1/asf/sd/df_aed1 ASQ2/asf/df_asq2/aks ASQ2 ASQ2/asf/df_asq2 ABX5/df_abx5/asf/sd/sdgqw ABX5 ABX5/df_abx5
内容的提问来源于stack exchange,提问作者masifq
相关产品推荐
相关产品推荐

