简介

  • awk命令

linux awk命令 详解

awk是一种文本处理工具,用于在文本文件中查找、过滤和处理数据。它以行为单位处理文件,可以根据指定的规则对文件内容进行分析和处理。以下是awk命令的基本语法和一些常用选项:

基本语法:

1
awk 'pattern { action }' filename
  • pattern: 模式,用于匹配文本的特定部分。
  • { action }: 动作,对匹配模式的行执行的具体操作。
  • filename: 要处理的文件的名称。

示例:

  1. 打印文件的每一行:
    1
    
    awk '{ print }' filename
    

    这会打印文件中的每一行。

  2. 打印指定列的内容:
    1
    
    awk '{ print $1, $3 }' filename
    

    打印文件中每行的第一个和第三个字段。

  3. 使用条件打印行:
    1
    
    awk '$2 > 50 { print $1, $2 }' filename
    

    打印第二列大于50的行的第一列和第二列。

  4. 计算列的总和:
    1
    
    awk '{ sum += $2 } END { print sum }' filename
    

    计算文件第二列的总和,并在文件处理结束后打印结果。

  5. 查找匹配模式的行:
    1
    
    awk '/pattern/ { print }' filename
    

    打印包含指定模式的行。

  6. 使用自定义分隔符:
    1
    
    awk -F':' '{ print $1, $3 }' filename
    

    使用-F选项指定字段分隔符,例如冒号。

  7. 使用条件进行计算:
    1
    
    awk '{ if ($2 > 50) { total += $2 } } END { print total }' filename
    

    仅当第二列大于50时才计算总和。

  8. 使用BEGIN块初始化变量:
    1
    
    awk 'BEGIN { total=0 } { total += $2 } END { print total }' filename
    

    使用BEGIN块初始化变量,然后在处理文件时进行累加。

  9. 删除重复行并排序:
    1
    
    awk '!seen[$0]++' filename | sort
    

    删除文件中的重复行并按字典顺序排序。

  10. 处理特定字段的特定范围:
    1
    
    awk '$1 == "John" && $3 >= 30 { print }' filename
    

    打印第一列为”John”且第三列大于等于30的行。

awk命令非常强大,可以通过组合不同的模式和动作来进行复杂的文本处理。以上示例只是简单演示了awk的基本用法,你可以根据需要结合更多的特性和选项来进行更复杂的文本处理操作。

linux awk命令 常用技巧

awk是一个功能强大的文本处理工具,具有丰富的功能和灵活的语法。以下是一些常用的awk命令技巧:

  1. 使用多个命令块:
    1
    
    awk '/pattern/ {print "Found:", $0} /another/ {print "Another:", $0}' filename
    

    可以在同一行使用多个模式和动作块,每个模式和动作块组合以大括号分隔。

  2. 设置字段分隔符:
    1
    
    awk -F',' '{print $1, $3}' filename
    

    使用-F选项设置字段分隔符,适用于以逗号分隔的CSV文件等。

  3. 使用NRNF内置变量:
    1
    
    awk '{print NR, NF, $0}' filename
    

    使用NR表示当前行号,NF表示当前行的字段数。在{print NR, NF, $0}中,$0表示整行。

  4. 计算每列的平均值:
    1
    
    awk '{ for (i=1; i<=NF; i++) sum[i]+=$i } END { for (i=1; i<=NF; i++) printf "%s %.2f\n", "Column", i, sum[i]/NR }' filename
    

    使用循环计算每列的总和,然后在END块中计算平均值。

  5. 在输出中使用格式化字符串:
    1
    
    awk '{printf "Name: %-10s, Age: %02d\n", $1, $2}' filename
    

    使用printf函数输出格式化的字符串,可以控制字段的宽度和对齐方式。

  6. 处理文件中的日期:
    1
    
    awk -F'-' '{print "Year:", $1, "Month:", $2, "Day:", $3}' filename
    

    使用自定义分隔符处理日期字段。

  7. 过滤并显示指定行数:
    1
    
    awk 'NR>=5 && NR<=10' filename
    

    使用NR过滤指定行数的行。

  8. 使用数组保存数据:
    1
    
    awk '{data[$1]+=$2} END {for (key in data) print key, data[key]}' filename
    

    使用数组保存数据,可以用于统计和汇总操作。

  9. 使用substr函数截取字符串:
    1
    
    awk '{print substr($1, 1, 3)}' filename
    

    使用substr函数截取字符串的一部分。

  10. 按列排序输出:
    1
    
    awk '{print $2, $1}' filename | sort
    

    使用sort命令按照第二列进行排序输出。

这些技巧可以帮助你更好地利用awk进行文本处理,满足不同场景下的需求。awk的灵活性和强大的功能使其成为处理文本数据的重要工具。

linux awk命令 高级技巧

awk命令提供了一系列高级技巧,允许更灵活、复杂的文本处理操作。以下是一些高级的awk技巧:

  1. 使用自定义函数:
    1
    
    awk 'function my_function(x) { return x*2 } {print my_function($1)}' filename
    

    可以在awk中定义和使用自定义函数。

  2. 多条件处理:
    1
    
    awk '{if ($1 > 50 && $2 == "John") print $0}' filename
    

    使用多个条件结合逻辑运算符进行复杂的过滤。

  3. 动态生成awk代码:
    1
    
    awk -v field=2 '{print $field}' filename
    

    使用变量动态指定要处理的字段。

  4. 模式范围匹配:
    1
    
    awk '/start_pattern/, /end_pattern/ {print}' filename
    

    使用模式范围匹配处理一段特定范围内的数据。

  5. 内置BEGINEND块:
    1
    
    awk 'BEGIN {print "Start Processing"} {print $0} END {print "End Processing"}' filename
    

    使用BEGINEND块在处理之前和之后执行特定的操作。

  6. 处理多个文件:
    1
    
    awk '{print FILENAME, $0}' file1.txt file2.txt
    

    awk可以处理多个文件,使用FILENAME变量可以获取当前正在处理的文件名。

  7. 对每行应用多个动作:
    1
    
    awk '{gsub("old", "new"); print}' filename
    

    使用gsub函数替换每一行中的字符串,并在同一行中执行其他操作。

  8. 获取命令的输出作为输入:
    1
    
    awk '{print $1}' <(some_command)
    

    使用<(command)语法可以将命令的输出作为awk的输入。

  9. 处理非定长字段:
    1
    
    awk -F',' '{print $NF}' filename
    

    使用NF表示最后一个字段,即使字段的数量是变化的。

  10. 使用getline函数读取下一行:
    1
    
    awk '{print; getline; print "Next line:", $0}' filename
    

    使用getline函数读取下一行并进行处理。

  11. 使用next跳过某些行:
    1
    
    awk '/pattern/ {print; next} {print "Skipped:", $0}' filename
    

    使用next跳过某些行的处理。

这些高级技巧可以在复杂的文本处理场景中发挥作用,充分发挥awk的强大功能。注意在使用高级功能时要谨慎,确保代码可读性和可维护性。

awk

  • AWK,是一种处理文本文件的语言,是一个强大的文本分析工具
  • 语法:awk [选项参数] 'script' var=value file(s) 或者 awk [选项参数] -f scriptfile var=value file(s)
  • 基本用法
    • awk '{[pattern] action}' {filenames} , 行匹配语句 awk '' 只能用单引号
    • awk '{print $1, $4}' log.txt, 每行按空格或TAB分割,输出文本的1,4项
    • awk -F, -F相当于内置变量FS,指定分割字符
    • awk -v ,设置变量
    • awk -f {awk脚本} {文件名}

在Linux中,awk命令是一种强大的文本处理工具,用于从文本文件中提取和处理数据。它读取输入文件的每一行,按照指定的模式进行匹配,并执行相应的操作。

以下是awk命令的一般语法:

1
awk 'pattern { action }' input_file

其中,pattern是用于匹配文本行的条件,action是要执行的操作,input_file是要处理的输入文件。

以下是一些常见的awk命令的用法:

  1. 打印文件的某一列:
    1
    
    awk '{ print $2 }' input_file
    

    此命令将打印输入文件中的每一行的第二列。

  2. 使用条件过滤行:
    1
    
    awk '$3 > 10 { print }' input_file
    

    此命令将打印输入文件中第三列大于10的行。

  3. 计算行数、列数或总和:
    1
    
    awk 'END { print NR }' input_file
    

    此命令将打印输入文件中的行数。

awk命令还支持其他一些高级功能,如使用正则表达式进行模式匹配、定义变量和函数、处理字段分隔符等。您可以根据需要使用更复杂的awk脚本进行数据处理。

请注意,awk命令可以与管道符号(|)和其他命令一起使用,以实现更复杂的数据处理任务。