awk从脚本内读取文件内容到变量

简介: awk从脚本内读取文件内容到变量

在awk中,如果你需要从脚本内读取文件内容并赋值给变量,可以利用awk的内置变量getline来逐行读取文件。以下是一个简单的示例,说明如何使用awk将文件内容读取到变量中:

#!/usr/bin/awk -f

BEGIN {
   
    while ((getline line < "filename") > 0) {
   
        # 这里将每一行的内容赋给变量line
        print "Line: " line
        # 可以进一步处理line,比如分割字段等
        split(line, fields, /[:,;\t]/)
        # 将字段赋给其他变量
        field1 = fields[1]
        field2 = fields[2]
        # 根据实际字段分隔符调整split函数中的正则表达式
    }
    if (getline < "filename" <= 0) {
   
        print "Error reading file"
    }
}

# 如果你只需要读取特定行或者处理文件中的数据记录,
# 也可以直接在规则(pattern)部分进行操作,而不是在BEGIN块中。
# END块用于在所有行处理完毕后执行的操作。

END {
   
    # 在这里你可以使用之前赋值给变量的值
}

请注意,在上述脚本中:

  • getline line < "filename" 会从名为"filename"的文件中逐行读取内容,并将每一行的内容存入变量line中。
  • split(line, fields, /[:,;\t]/) 是用来分割当前行内容为多个字段,并将它们存储在数组fields中。
  • 如果你需要将这些字段赋给其他的awk变量(如field1和field2),可以直接引用数组元素。

如果你想在shell脚本中用awk读取文件内容并将其赋值给shell变量,通常的做法是通过管道或命令替换来实现,例如:

#!/bin/bash

content=$(awk 'NR==1{print}' filename)
# 上述命令将文件filename的第一行内容赋给shell变量$content

# 或者遍历整个文件
while IFS= read -r line; do
    awk '{print $1}' <<< "$line"
done < filename
# 上述循环将逐行读取文件并将每行的第一个字段输出,若要存入shell变量,可以:
while IFS= read -r line; do
    shell_var=$(awk '{print $1}' <<< "$line")
    echo "$shell_var"
done < filename

对于复杂的awk脚本,可能更适合在awk内部完成所有处理,而不需要将内容再传递回shell变量。

目录
相关文章
|
6月前
|
Perl
在 `awk` 脚本中初始化变量
在 `awk` 脚本中初始化变量
69 2
|
5月前
|
Python
【六行代码】Python逐行读取txt、换行输出到txt
【六行代码】Python逐行读取txt、换行输出到txt
|
6月前
|
Perl
在awk中,从多个文件读取数据
在awk中,从多个文件读取数据
83 3
|
Shell Linux
Shell脚本循环读取文件中的每一行
Shell脚本循环读取文件中的每一行
184 0
|
Ubuntu Linux Perl
如何使用 sed 替换文件中的字符串?
如何使用 sed 替换文件中的字符串?
211 0
|
XML Shell 应用服务中间件
使用shell脚本实现在指定文件中,指定行号写入指定内容
使用shell脚本实现在指定文件中,指定行号写入指定内容
895 0
使用shell脚本实现在指定文件中,指定行号写入指定内容
|
Shell Linux Perl
shell 定义绝对路径,出错 sed: 未找到命令,脚本功能:替换某一行内容
shell 定义绝对路径,出错 sed: 未找到命令,脚本功能:替换某一行内容
shell 定义绝对路径,出错 sed: 未找到命令,脚本功能:替换某一行内容
将cmd中命令输出保存为TXT文本文件
转自:https://www.cnblogs.com/hongten/archive/2013/03/27/hongten_windows_cms.html 例如:将Ping命令的加长包输出到D盘的ping.txt文本文件。
1655 0