linux – 有没有办法在awk语句中定义一个用户定义的函数,该函数在bash脚本中?

我认为这个问题不言而喻.我是初学者,所以如果可能,请告诉我.如果没有,那么你给我一个更好的解决方案,因为我的bash脚本在很大程度上依赖于某些awk语句,但是大部分脚本都是bash.我在我的bash脚本中使用awk语句比较两个文件.基本上检查值是否相同. (见下面的文件)

FILE1.TXT

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

FILE2.TXT

Name  Col1  Col2  Col3   
-----------------------         
row1  1     4     7 
row2  2     5     999

这是我的bash脚本的结构:

#!/bin/bash
.
.
.

awk -F '\t' '
              # skips first two lines
              FNR < 2 {next}                       
              FNR == NR {           
                for (i = 2; i <= NF; i++) {
                  a[i,$1] = $i;      
                }    
                b[$1];           
                next;       
              }

              ($1 in b) {                          

                for (i = 2; i <= NF; i++) 
                {
                   # does something
                }
              }
' file1.txt file2.txt
.
.
.

我有很多重复的代码只在awk语句中有用,所以我想创建一个放在awk语句中的函数以避免重复.这可能吗?

如果需要进一步说明,请与我们联系.

最佳答案
如果您询问如何在多个脚本中重用一段Awk代码而不将其保存在单独的文件中,则可以定义shell字符串并对其进行插值.

awkfn='function foo () { print "Hiya universe" }'

awk -F : "$awkfn"'BEGIN { foo() }'

注意你需要如何插入变量的双引号,但通常需要围绕Awk代码的单引号.我在一个单引号字符串旁边放了一个双引号字符串(它们之间没有空格)但是还有其他方法可以完成同样的事情.

转载注明原文:linux – 有没有办法在awk语句中定义一个用户定义的函数,该函数在bash脚本中? - 代码日志