使用awk命令获取文本的某一行,某一列

1、打印文件的第一列(域)                 : awk '{print $1}' filename
2、打印文件的前两列(域)                 : awk '{print $1,$2}' filename
3、打印完第一列,然后打印第二列  : awk '{print $1 $2}' filename
4、打印文本文件的总行数                : awk 'END{print NR}' filename
5、打印文本第一行                          :awk 'NR==1{print}' filename
6、打印文本第二行第一列                :sed -n "2, 1p" filename | awk 'print $1'


#(获取test文件的第4)

#cat test| awk 'NR==4'cat test|sed -n '4p'直接获取某一行的数据



    shell里面的赋值方法有两种,格式为
    1) arg=`(命令)`
    2) arg=$(命令)
因此,如果想要把某一文件的总行数赋值给变量nlines,可以表达为:
    1) nlines=`(awk 'END{print NR}' filename)`
或者

    2) nlines=$(awk 'END{print NR}' filename)


awk练习题
   wang     4
   cui      3
   zhao     4
   liu      3
   liu      3
   chang    5
   li       2
   1 通过第一个域找出字符长度为4的
   2 当第二列值大于3时,创建空白文件,文件名为当前行第一个域$1 (touch $1)
   3 将文档中 liu 字符串替换为 hong
   4 求第二列的和
   5 求第二列的平均值
   6 求第二列中的最大值
   7 将第一列过滤重复后,列出每一项,每一项的出现次数,每一项的大小总和
   1、字符串长度
    awk 'length($1)=="4"{print $1}'
   2、执行系统命令
    awk '{if($2>3){system ("touch "$1)}}'
   3、gsub(/r/,"s",域) 在指定域(默认$0)中用s替代r  (sed 's///g')
    awk '{gsub(/liu/,"hong",$1);print $0}' a.txt
   4、列求和
    df -h | awk '{a+=$2}END{print a}'
   5、列求平均值
    df -h | awk '{a+=$2}END{print a/NR}'
    df -h | awk '{a+=$2;b++}END{print a,a/b}' 
   6、列求最大值
    df -h | awk 'BEGIN{a=0}{if($2>a) a=$2 }END{print a}'
   7、将第一列过滤重复列出每一项,每一项的出现次数,每一项的大小总和
    awk '{a[$1]++;b[$1]+=$2}END{for(i in a){print i,a[i],b[i]}}'

### 使用 `awk` 提并输出指定行 #### 基本语法 `awk` 是一种强大的文本处理工具,能够逐行读文件内容并根据条件进行筛选和操作。其基本命令格式如下: ```bash awk 'pattern { action }' filename ``` - `pattern`:用于匹配特定行的条件。 - `action`:对匹配到的行执行的操作。 #### 提指定行 如果需要提文件中的某一行或某些行,可以通过以下方法实现: 1. **通过行号提** 使用 `NR`(Number of Records)变量可以指定提的行号。例如,提第 3 行的内容: ```bash awk 'NR==3' filename ``` 如果需要提多个行号,可以使用逻辑运算符组合多个条件[^2]: ```bash awk 'NR==3 || NR==5' filename ``` 2. **通过内容匹配提** 可以使用正则表达式或字符串匹配来提包含特定内容的行。例如,提包含字符串 "error" 的行: ```bash awk '/error/' filename ``` 或者更复杂的条件,如同时包含 "error" 和 "warning" 的行: ```bash awk '/error/ && /warning/' filename ``` 3. **通过字段值提** 如果文件是以分隔符(如空格、逗号等)分隔的列数据,可以使用 `$n` 来引用第 n 列的值。例如,提第 2 列等于 "compute" 的行: ```bash awk '$2 == "compute"' filename ``` 4. **结合 BEGIN 和 END** 在执行具体操作之前或之后,可以定义一些额外的操作。例如,在提指定行之前打印一条消息: ```bash awk 'BEGIN { print "Start processing" } $2 == "compute" { print $0 }' filename ``` #### 示例 假设有一个文件 `data.txt`,内容如下: ``` lcontroller scheduler internal lcontroller conductor internal lcontroller consoleauth internal compute1 compute nova compute2 compute nova lcontroller compute nova ``` - 提第 3 行: ```bash awk 'NR==3' data.txt ``` 输出结果: ``` lcontroller consoleauth internal ``` - 提包含 "compute" 的所有行: ```bash awk '/compute/' data.txt ``` 输出结果: ``` lcontroller conductor internal compute1 compute nova compute2 compute nova lcontroller compute nova ``` - 提第 2 列为 "compute" 的行: ```bash awk '$2 == "compute"' data.txt ``` 输出结果: ``` compute1 compute nova compute2 compute nova lcontroller compute nova ``` #### 注意事项 - 如果文件中存在空行,默认情况下 `awk` 不会处理这些行。可以通过显式条件排除空行[^5]。 - 使用正则表达式时,注意转义特殊字符。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值