UNIX下如何指定列搜索用户输入代码并返回对应整行?
解决精确匹配文件第6-12列内容的问题
嘿,我明白你现在的痛点——本来只想找出第6到12列精确匹配目标代码的行,结果工具把只要包含代码的行都返回了,比如那行6314不在目标列却被误捞出来。别担心,用awk、sed或者perl都能轻松解决这个精确位置匹配的需求,我给你逐个讲清楚:
1. 使用awk(最直观的列处理工具)
awk的substr函数可以精准提取指定位置的字符段,非常适合你的场景。假设你要搜索的代码是TARGET_CODE(长度为7,因为6-12列一共7个字符),命令如下:
awk 'substr($0, 6, 7) == "TARGET_CODE"' your_drug_list.txt
substr($0, 6, 7):从整行($0)的第6个字符开始,提取7个字符(刚好覆盖6-12列)- 只有当这段提取的内容和目标代码完全相等时,才会输出该行,完美避免了其他位置匹配的情况。
2. 使用sed(正则匹配特定位置)
sed可以通过正则表达式锁定行内的精确位置,同样能实现需求:
sed -n '/^.{5}TARGET_CODE/p' your_drug_list.txt
^.{5}:匹配行开头的任意5个字符(把光标定位到第6个字符的位置)TARGET_CODE:紧随其后的就是我们要匹配的代码,确保它刚好在6-12列的位置-n和p搭配:只输出匹配成功的行,过滤掉不相关的内容。
3. 使用perl(灵活的文本处理)
perl的处理逻辑和awk类似,只是字符串索引从0开始,所以要稍微调整位置参数:
perl -ne 'print if substr($_, 5, 7) eq "TARGET_CODE"' your_drug_list.txt
substr($_, 5, 7):从行内容($_)的第5个索引位置(对应第6个字符)开始,提取7个字符- 当这段内容和目标代码相等时,就打印该行。
小提示
- 记得把命令里的
TARGET_CODE替换成你实际要搜索的代码 - 如果你的代码长度不是7位(比如6位),记得调整
substr的第三个参数,或者sed正则里的匹配长度——核心就是确保只检查6-12这个字符区间的内容。
这样处理后,那些代码出现在其他列的行就不会被误返回啦!
内容的提问来源于stack exchange,提问作者Jesse G
相关产品推荐
相关产品推荐

