有没有办法将变量从awk语句传递给bash函数作为参数?

雷德森

我正在尝试使用awkbash脚本中语句从文本文件(例如1或4和2或3)中查找一些特定值如果在文件中(awk语句内)找到了该值,那么我想从awk语句外调用一个函数,并将找到的值作为参数传递给它。

我的问题:(1)这可能吗?如果是这样,那又如何?(2)如果不可能或有更好的方法,那怎么办?

请注意,搜索文件时,我跳过了文本文件的前两行。让我知道是否需要进一步说明。

file.txt

Name  Col1  Col2  Col3  
-----------------------
row1  1     4     7        
row2  2     5     8         
row3  3     6     9 

实际功能retrieve比此简化示例复杂得多。因此,我需要对此函数进行调用,因为我不想将其放在awk语句中。

编辑1:我正在使用GNU AWK

编辑2:如果找到2或3,可以说我还有另一个功能。那它将如何运作?

function retrieve {
    if [[ "$1" == "1" ]]; then
        echo "one beer on the wall"
    elif [[ "$1" == "4" ]]; then
        echo "four beers on the wall"
    fi
}

function retrieve2 {
    if [[ "$1" == "2" ]]; then
        echo "two beers on the wall"
    elif [[ "$1" == "3" ]]; then
        echo "three beers on the wall"
    fi
}

awk -F '\t' '
    FNR < 2 {next}
    FNR == NR {
        for (i=2; i <= NF; i++) 
        {
            if (($i == 1) || ($i == 4))
                printf(%s, "'retrieve "$i" '")    # Here is the problem

            if (($i == 2) || ($i == 2))
                printf(%s, "'retrieve2 "$i" '")    # Here is the problem
        }
    }

' file.txt
莱斯曼纳

跳过awk,以bash的方式做所有事情

tail -n +3 file.txt | while read -r ignored c1 c2 c3; do
  echo "$c1"
  echo "$c2"
  echo "$c3"
done | while read -r value; do
  if [ "$value" -eq 1 -o "$value" -eq 4 ]; then
    retrieve "$value"
  elif [ "$value" -eq 2 -o "$value" -eq 3 ]; then
    retrieve2 "$value"
  fi
done

说明

  • tail跳过前两行
  • 第一个while循环序列化表值,而忽略第一列
  • 第二个while循环检查每个值并确定要调用的函数
  • 两个while循环大致可以完成awk脚本的工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法将方法作为参数传递给方法?

来自分类Dev

有没有办法将方法作为参数传递给方法?

来自分类Dev

有没有办法将函数作为宏的参数传递?

来自分类Dev

当用作类型参数时,有没有办法将参数传递给类构造函数?

来自分类Dev

有没有办法将状态传递给作为道具传递的组件?

来自分类Dev

有没有办法遍历传递给Elixir中的函数的所有参数?

来自分类Dev

有没有办法将相同的值传递给函数的所有参数?

来自分类Dev

有没有办法很好地跟踪传递给类的参数变量

来自分类Dev

有没有办法调用作为参数传递的元素的函数?

来自分类Dev

有没有办法调用作为参数传递的元素的函数?

来自分类Dev

有没有办法将参数传递给optuna中的多个作业?

来自分类Dev

有没有办法将数组参数传递给管道?

来自分类Dev

有没有办法将网格名称或参数传递给点击事件?

来自分类Dev

有没有办法将变量从ui.router传递给控制器?

来自分类Dev

有没有办法将环境变量传递给python脚本?

来自分类Dev

有没有办法将变量传递给Django模板中的<div> id?

来自分类Dev

有没有办法将变量传递给 jQ .attr 或 .css?

来自分类Dev

有没有办法将变量传递给文档对象?

来自分类Dev

有没有办法将范围传递给指令templateUrl:函数?

来自分类Dev

有没有办法将多个函数传递给AngularJS指令?

来自分类Dev

有没有办法将函数从objective-c++传递给标准c++?

来自分类Dev

有没有办法将哈希数组传递给 Chef 中的提供程序函数

来自分类Dev

Laravel。有没有办法将API资源作为参数传递?

来自分类Dev

有没有办法在查询 XML 时将变量作为单例传递?

来自分类Dev

有没有办法将方法名称传递给函数,并让该函数返回封装该方法的委托?

来自分类Dev

有没有办法将额外的参数传递给 List.ConvertAll 中的转换器

来自分类Dev

有没有办法像在SwiftUI中一样将变量传递给类?

来自分类Dev

有没有办法将\ r \ n作为C程序的命令行参数传递?

来自分类Dev

有没有办法将变量从beforeSend传递到jQuery .ajax函数中的成功函数?

Related 相关文章

  1. 1

    有没有办法将方法作为参数传递给方法?

  2. 2

    有没有办法将方法作为参数传递给方法?

  3. 3

    有没有办法将函数作为宏的参数传递?

  4. 4

    当用作类型参数时,有没有办法将参数传递给类构造函数?

  5. 5

    有没有办法将状态传递给作为道具传递的组件?

  6. 6

    有没有办法遍历传递给Elixir中的函数的所有参数?

  7. 7

    有没有办法将相同的值传递给函数的所有参数?

  8. 8

    有没有办法很好地跟踪传递给类的参数变量

  9. 9

    有没有办法调用作为参数传递的元素的函数?

  10. 10

    有没有办法调用作为参数传递的元素的函数?

  11. 11

    有没有办法将参数传递给optuna中的多个作业?

  12. 12

    有没有办法将数组参数传递给管道?

  13. 13

    有没有办法将网格名称或参数传递给点击事件?

  14. 14

    有没有办法将变量从ui.router传递给控制器?

  15. 15

    有没有办法将环境变量传递给python脚本?

  16. 16

    有没有办法将变量传递给Django模板中的<div> id?

  17. 17

    有没有办法将变量传递给 jQ .attr 或 .css?

  18. 18

    有没有办法将变量传递给文档对象?

  19. 19

    有没有办法将范围传递给指令templateUrl:函数?

  20. 20

    有没有办法将多个函数传递给AngularJS指令?

  21. 21

    有没有办法将函数从objective-c++传递给标准c++?

  22. 22

    有没有办法将哈希数组传递给 Chef 中的提供程序函数

  23. 23

    Laravel。有没有办法将API资源作为参数传递?

  24. 24

    有没有办法在查询 XML 时将变量作为单例传递?

  25. 25

    有没有办法将方法名称传递给函数,并让该函数返回封装该方法的委托?

  26. 26

    有没有办法将额外的参数传递给 List.ConvertAll 中的转换器

  27. 27

    有没有办法像在SwiftUI中一样将变量传递给类?

  28. 28

    有没有办法将\ r \ n作为C程序的命令行参数传递?

  29. 29

    有没有办法将变量从beforeSend传递到jQuery .ajax函数中的成功函数?

热门标签

归档