linux shell脚本awk替换中的NF跟NR的意义

作者&投稿:巧妍 (若有异议请与网页底部的电邮联系)
awk中 NR 和 NF到底是什么意思? 能举例说明吗?~

NR - Number of Record - 当前处理的行是第几行(因为awk是流处理工具,一行一行处理的,所以NR在不停的自增1)
FNR - File Number of Record - 当前处理的行是当前处理文件的第几行
NF - Number of Fileds - 当前行有多少列数据(这个在每行都会根据设定的分割符重新计算,默认分割符是任意连续的多个空白符)

(NR==FNR) 大致等效于 (ARGIND==1) , 一般用来判断是不是在处理第一个文件。
但区别是: 前者是判断当前处理的总行数跟文件内行数相等,而这种情况一般都是在第一个文件上,而ARGIND==1是参数位置第1的文件时生效。—— 但,如果前面的文件是空的,那么NR==FNR就生效于第一个非空文件,而ARGIND==1不会。这微妙的区别使它们可以应用于不同的需要。
实际使用中还可以用文件名判断当前处理的是哪一个文件。
上面几种使用的环境: 用awk连续处理多个文件时,比如 awk '命令序列' file1 file2 file* 这样的情况下,判断在处理哪个文件了。

NR==2就是对第二行执行后面的操作,也就是 {print $0}, 而print $0 的意思就是打印当前行,也就是第二行。所以

awk 'NR==n{print $0}' file

这条命令的作用就是打印 file 文件的第n行。

NF表示第几个字段,每个字段默认用空格分开。
NF-3的意思是倒数第三个字段,ssh2是第-0个字段,663951是第-1个字段....
192.168.0.78是第-3个字段。

NF 是每行的字段数
NR 是总共读取了多少行
像awk $(NF-3) 就是倒数第四个字段, 所以恰好是IP地址
另注, 空格是字段识别时的分隔符

NF代表是每行的字段数量
NR表示awk开始执行程序后所读取的数据行数


安西县15184352859: linux sed awk命令结合匹配符 根据第二行内容,替换第一行内容 可以写成shell脚本 -
隗童百咳: 我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件.具体步骤如下:1)截取test.xml文件起始行到行,保存到tmp文件;2)将要添加的内容根据变量值展开,附加写入tmp文件;3...

安西县15184352859: shell脚本替换A、B两个文件里面的内容 -
隗童百咳: 先读取A文件中那行内容,然后通过awk获取B文件中的第五行内容,替换后重新覆盖写入A文件.代码如下:#!/bin/sh A=/usr/123.txt B=/tem/456.conf read line <$A awk -v a=$line 'NR==5{print $1"\t"a}' $B >$A

安西县15184352859: 在linux下的shell脚本中awk {print 0.45/$1}是什么意思?求解各位,谢谢. -
隗童百咳: $@:表示所有脚本参数的内容 $#:表示返回所有脚本参数的个数.示例:编写如下shell脚本,保存为test.sh #!/bin/sh echo "number:$#" echo "argume:$@" 执行脚本: ./test.sh first_arg second_arg说明:给脚本提供了两个参数,所以$#输出的结果是2,$@代表了参数的内容!

安西县15184352859: linux脚本中awk是什么awk后面接的NR是什么意思 -
隗童百咳: NR==2就是对第二行执行后面的操作,也就是 {print $0}, 而print $0 的意思就是打印当前行,也就是第二行.所以awk 'NR==n{print $0}' file这条命令的作用就是打印 file 文件的第n行.

安西县15184352859: linux shell 用什么命令可以修改脚本中全部日期为当前系统日期? -
隗童百咳: 1、你是要修改test为当前时期,还是想将脚步的结果修改为当前日期2、如果修改结果可以定义个变量#!/bin/sh ymd=`date +%Y%m%d` cccccc./backup/${ymd}/aaa_${ymd}_aaa.a/backup/${ymd}/aaa_${ymd}_aaa.a/backup/${ymd}/aaa_${ymd}_aaa.a/backup/${ymd}/aaa_${ymd}_aaa.a/backup//${ymd}/aaa_${ymd}_aa.a3、如果仅仅修改test可以用vi或sed

安西县15184352859: linux 编写一个awk脚本,针对etc/passwd/文件统计每一种shell的用户个数 -
隗童百咳: 每种SHELL的用户个数:awk -F":" '{print $7}' /etc/passwd | uniq -c 第2个问题思路:另外一个需要用for去读passwd的每一行,用awk去取出每行的第一个字段(用户名)赋值给一个变量,取第7个字段(SHELL)赋值给另外一个变量;接下来就判断第7个字段(shell)是否为空,如果为空就输出第一个字段(即用户名).太晚了,有时间再把脚本补上来.

安西县15184352859: shell脚本AWK命令中变量$line的用法 -
隗童百咳: 话说我在redhat下执行未报错,结果如下:[root@HZHG-STD-WEB-P3 ~]# sh testMon Nov 25 08:38:51 CST 2013a:11213141Mon Nov 25 08:38:51 CST 2013 不过我把开头释义代码修改成 #!...

安西县15184352859: linux shell 和linux 命令的区别 -
隗童百咳: 准确上讲应该说是shell脚本文件编程(当然了,在该shell脚本文件中也可以包含linux系统命令).shell脚本文件是一个文本文件,它是将你需要完成的各种复杂功能通过编写shell程序来实现.例如:模式匹配(awk)、字符串替换功能(sed)

安西县15184352859: linux shell 的AWK入门基础大哥们帮忙提供下吧 -
隗童百咳: #!/bin/bash #script name:myping isok=`ping -c 4 | awk -F, '/received/' | awk ''` if [ $isok -gt 0 ];then echo "linking is ok" else echo "linking is fialed" fi 上面就是一个小的shell脚本: 解释如下: ping -c 4 就是发送4个数据包.然后把输出发送给awk ...

安西县15184352859: 如何在windows下使用linux的shell脚本 -
隗童百咳: Linux的shell脚本提供了大量方便的工具,如:awk、grep、more、tail、wc等等,方便用户对文件、数据抄的分析,但是windows相对来说就没那么方便,要分析一个数据可能需要自己编程、编译然后才能对一些数据进行分析,对于一些轻量级...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网