gpt4 book ai didi

linux - 在 Linux shell 上获取包含值或字符串的字段

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:30 25 4
gpt4 key购买 nike

案例:

$ cat data.txt
foo,bar,moo

我可以使用cut 获取字段数据,假设, 为分隔符,但前提是我知道它在哪个位置。获取值 bar(第二个字段)的示例:

$ cat data.txt | cut -d "," -f 2
bar

如果我只知道它包含一个 a 字母,我如何获得相同的 bar(或数字字段 == 2)?< br/>像这样的东西:

$ cat data.txt | reversecut -d "," --string "a"
[results could be both "2" or "bar"]

换句话说:我如何使用 linux shell 命令/工具知道文本分隔文件中包含子字符串的字段是什么

当然,编程是允许的,但我真的需要循环和条件结构吗?没有解决这个问题的命令吗?

对于特定的 shell,我更喜欢 Bash 解决方案。

A close solution here, but not exactly the same.

更多基于相同示例的场景(根据要求):

  • 对于 mmo 的搜索模式,结果可能是 3moo
  • 对于 ffo 的搜索模式,结果可能是 1foo

最佳答案

遵循简单的 awk 也可能对您有所帮助。

awk -F, '$2~/a/{print $2}' data.txt

在这种情况下,输出将是 bar

解释:-F,:设置行的字段分隔符为逗号,,方便识别字段。$2~/a/:如果第二个字段中有字母 a,则在此处检查条件,如果是,则打印第二个字段。


编辑: 现在也根据 OP 的评论和编辑的问题添加解决方案。假设下面有 Input_file

cat data.txt
foo,bar,moo
mo,too,far
foo,test,test1
fo,test2,test3

下面是相同的代码:

awk -F, '{for(i=1;i<=NF;i++){if($i ~ /fo/){print $i}}}'  data.txt
foo
foo
fo

awk -F, '{for(i=1;i<=NF;i++){if($i ~ /mo/){print $i}}}' data.txt
moo
mo

关于linux - 在 Linux shell 上获取包含值或字符串的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48413368/

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