Bash UNIX在特定列中搜索用户指定的代码并输出整行

Bash UNIX在特定列中搜索用户指定的代码并输出整行,bash,unix,Bash,Unix,我正在开发一个程序,搜索药物列表,并根据用户的要求返回报告。因此,我试图在这个列表中搜索用户输入的代码,然后返回相关信息 EX. (medcode) (doseage) commA6314 ifosfamide 30 home5341209 urokinase 6314 当我搜索文件时,我只希望它在第6-12列中找到匹配项时返回该行(第一行为6314),但此时它将返回两行,因为第二行也包含6314。我看到的所有答案都使用了文本处理实用程序,如awk、sed或per

我正在开发一个程序,搜索药物列表,并根据用户的要求返回报告。因此,我试图在这个列表中搜索用户输入的代码,然后返回相关信息

EX. (medcode)           (doseage)
commA6314   ifosfamide  30
home5341209 urokinase   6314
当我搜索文件时,我只希望它在第6-12列中找到匹配项时返回该行(第一行为6314),但此时它将返回两行,因为第二行也包含6314。我看到的所有答案都使用了文本处理实用程序,如awk、sed或perl,程序的条件之一是不使用任何这些实用程序

程序预期输出:

 Enter medication code?
 6314
 See Generic name g/G or Dose d/D?
 g
 ifosfamide
我现在得到的是:

Enter medication code?
6314
See Generic name g/G or Dose d/D?
g
ifosfamide
urokinase
因此,它还显示关于第二种药物的信息,因为6314也包含在doseage列中。

尝试使用以下方法:

是一个bash参数扩展,它只保留第一个空格前的第一个“单词”

使用bash 要匹配6314,但仅当它在第6列中使用just bash启动时,请尝试:

$ while read -r line; do [[ "$line" =~ ^.{5}6314 ]] && echo "$line"; done <infile
commA6314   ifosfamide  30
使用grep 要匹配6314,但仅当它从第6列开始时,请尝试:

$ grep -E '^.{5}6314' infile
commA6314   ifosfamide  30
这里,
^
指定一行的开头,
{5}
匹配任意五个字符。因此,
^.{5}6314
匹配6314,但仅当它作为行中的第六个字符开始时匹配

使用awk 这里,
substr($0,6,4)
从第六行开始的行中选择四个字符。如果这等于
6314
,则打印该行

使用sed
-n
告诉sed不要打印,除非我们明确要求它打印
/^.{5}6314/p
告诉sed打印任何从第六个字符开始的与
6314
匹配的行,或者其他实用程序(如cut)是否正常?6314不在从5开始的列范围内!cut是可以的指导方针只是说程序不能使用任何文本处理工具,如awk、sed或perl。现在它不再是5而是6?重点是什么?对不起,我把问题修改得更清楚了。我很抱歉英语不是我的第一语言我编辑这个问题是为了更清楚地了解我想要达到的目标我编辑这个问题是为了更清楚地了解我想要达到的目标
$ while read -r line; do [[ "$line" =~ ^.{5}6314 ]] && echo "$line"; done <infile
commA6314   ifosfamide  30
$ while read -r code name extra; do [[ "$code" =~ ^.{5}6314 ]] && echo "$name"; done <infile
ifosfamide
$ grep -E '^.{5}6314' infile
commA6314   ifosfamide  30
$ awk '"6314" == substr($0, 6, 4)' infile
commA6314   ifosfamide  30
$ sed -En '/^.{5}6314/p' infile
commA6314   ifosfamide  30