【问题标题】:find first value matching the substring找到与子字符串匹配的第一个值
【发布时间】:2017-01-26 17:05:14
【问题描述】:

第 9 列有多个值,用“;”分隔。我试图在选项卡限制文件的 $9 列中的“name_id”之后找到第一次出现的字符串 - 文件的第一行看起来像这样,例如。

1   NY  state   3102016 3102125 .   +   .   name_id "ENSMUSG8868"; trans_id "ENSMUST00000082908"; number "1"; id_name "Gm26206";ex_id "ENSMUSE000005";

有多个值用“;”分隔在第 9 列。我可以想出这个命令来提取最后一个“ENSMUSE000005”id

sed 's|.*"\([0-9_A-Z]\+\)".*|\1|' input.txt | head

可以用 awk 中的正则表达式来完成吗?非常感谢!

【问题讨论】:

  • ENSMUSG8868你想要的输出吗?

标签: regex string awk


【解决方案1】:
echo $x |awk -F';' '{split($1,a," ");gsub(/"/ ,"" ,a[10]);print a[10]}'
ENSMUSG8868

x 是你的行。

基于 OP 的 cmets :

echo $x |awk -F';' '{split($1,a," ");gsub(/"/ ,"" ,a[10]);print a[1],a[10]}'
1 ENSMUSG8868

【讨论】:

  • 这很完美!谢谢。无论如何要输出第一列吗?现在我通过运行单独的 awk 命令分两步完成。将在给定两个不同的分隔符的情况下组合这些可能的。
  • 包括第一列在内的预期输出是什么?
  • 1 ENSMUSG8868
  • 这是一个如此简洁和完美的解决方案!非常感谢! :)
猜你喜欢
  • 2020-08-02
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
相关资源
最近更新 更多