gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:05:57 25 4
gpt4 key购买 nike

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

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 也包含在剂量列中。

最佳答案

使用庆典

要匹配 6314,但前提是它仅使用 bash 从第 6 列开始,请尝试:

$ while read -r line; do [[ "$line" =~ ^.{5}6314 ]] && echo "$line"; done <infile
commA6314 ifosfamide 30

这从文件中逐行读取。仅当该行与正则表达式 ^.{5}6314 匹配时才会回显到输出,这要求 6314 从行首的第六个字符开始出现。

仅打印行中的第二个单词,但前提是第一个单词与您的数字位置 6 匹配:

$ while read -r code name extra; do [[ "$code" =~ ^.{5}6314 ]] && echo "$name"; done <infile
ifosfamide

使用 grep

要匹配 6314 但仅当它从第 6 列开始时,请尝试:

$ grep -E '^.{5}6314' infile
commA6314 ifosfamide 30

此处,^ 指定行的开头,.{5} 匹配任意五个字符。因此,^.{5}6314 匹配 6314,但前提是它从该行的第六个字符开始。

使用 awk

$ awk '"6314" == substr($0, 6, 4)' infile
commA6314 ifosfamide 30

此处,substr($0, 6, 4) 从第六行开始选择四个字符。如果这等于 6314,则打印该行。

使用 sed

$ sed -En '/^.{5}6314/p' infile
commA6314 ifosfamide 30

-n 告诉 sed 不要打印,除非我们明确要求它打印。 /^.{5}6314/p 告诉 sed 打印从第六个字符开始与 6314 匹配的任何行。

关于bash - UNIX 在特定列中搜索用户指定的代码并输出整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48756838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com