8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

读取文本文件并将其放入 awk 文件中

Thyag 2月前

31 0

我有一个文件,其中有千余行,每行都有一个 12 个字符的字符串。我还有一个 awk 脚本,其中有一个函数。#!/usr/local/bin/gawk -f ...

我有一个文件,其中有千多行,每行都有一个 12 个字符的字符串。

我还有一个 awk 脚本,其中有一个函数。

   #!/usr/local/bin/gawk -f
    
    @include "home/user/functions.awk"
    {
    
            STRType=substr($0,27+23,2);
            TYPEOUT=substr($0,28,3);
    
            if(STRType == "O1")
            {
    
                    filterTxtforfunc($0,"PRH1DCHK");
    
            }
    
        else
        if(STRType=="H6")
            {
                    print substr($0,28)
                    fflush()
            }
    
        else
        if(STRType=="J7" && TYPEOUT=="000")
            {
                    print substr($0,28)
                    fflush()
            }
    
    
    }

我想 input.txt 逐行读取文件并使用每行的前 8 个字符作为函数的输入 filterTxtforfunc

我检查过类似的主题,但它们对我没有帮助。除了 shell 脚本之外,我没有可能使用 Python、Jason 和其他语言和库。我用 bash 脚本编写了它,但现在我需要使用, getline 因为在 awk 文件中无法使用 bash 脚本。

这是我的 bash 脚本,它可以按我想要的方式工作(但我无法在 awk 脚本文件中使用它):

filterTxtforfunc() {
   echo does something
}
input_file="input.txt"
while IFS= read -r line; do
   # Extract the first 8 characters from the line
   code="${line:0:8}"
   # Dynamically build the command and execute it
   filterTxtforfunc "$0" "$code"
done < "$input_file"

我用过但不起作用的是:

BEGIN {
    input_file="input.txt"
    while ( (input_file | getline line) > 0 ) {
        ARGV[ARGC++] = line
    }
    close(input_file)
}

input.txt是这样的:

WRM3BHIZ0004
NRB1SAPB0122
LRT1SYGM0114
KRF1LAEI0451
JRU1TEEE0764
ZRQ1LQWS0666
PRH1DCHK0904
...
帖子版权声明 1、本帖标题:读取文本文件并将其放入 awk 文件中
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Thyag在本站《shell》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 无论如何,这种设计似乎都是倒退的。如果我能猜出你想做什么,一个常见的解决方案是让 Awk 读取输入文件两次;第一次,填充一个数据结构,告诉你文件中的内容在哪里,第二次,利用对整个文件的知识再次处理每一行输入。但实际上,正如目前所描述的,这似乎是一个

  • 也许是这样的:

    awk '
        # ...
        function processfile (file,        e,line,code) {
            for (;;) {
                e = getline line <file
                if (e<0) exit 1
                if (e==0) break
    
                code = substr(line,1,8)
                processline(line,code)
            }
            close(file)
        }
        # ...
    '
    

    定义 processline 函数。 processfile 使用包含要处理的文件的名称的字符串进行调用。

返回
作者最近主题: