测试文本 # 生成测试文本内容 $ seq -f "%02g daodaotest" 1 10 > test.txt # 查看测试文本内容,并显示行号 $ cat -n test.txt 1...|| (NR>4 && NR<8)' test.txt 打印奇偶行内容 # 打印奇数行内容 ## NR 表示行号 $ awk 'NR%2!...1(因为上次 i 的值由 0 变成了 1),条件为假不打印。 ## 读取第 3 行记录,因为上次条件为假,i 恢复初值为 0,继续打印。...$ awk 'i=!...:m 表示起始行;~2 表示:步长 $ sed -n '1~2p' test.txt ## 先打印第 1 行,执行 n 命令读取当前行的下一行,放到模式空间,后面再没有打印模式空间行操作,所以只保存不打印
log/shell #日志路径 log=$logdir/log.log #日志文件 is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=0 #是否记录日志: 1记录 0不记录 file="serverlists.txt" iniFile="temp.ini" datef(){...];then print_log "$iniFile文件不存在" fi print_log "开始批量生成ini文件" while read line do name=$(echo $line |awk... -F':' '{print $1}') ip=$(echo $line |awk -F':' '{print $2}'|sed 's/[ ][ ]*//g') \cp $iniFile "$name"
log/shell #日志路径 log=$logdir/check.log #日志文件 is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=1 #是否记录日志: 1记录 0不记录 restart_file=/data/scripts/run.sh #服务启动和关闭控制脚本 end_string...:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$JAVA_HOME/bin is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=1 #是否记录日志: 1记录 0不记录 logdir=/data/log/shell #日志路径 log=$logdir/restart.log...log/shell #日志路径 log=$logdir/check.log #日志文件 is_font=1 #终端是否打印日志: 1打印
clear #日志路径 log=$logdir/clear.log #日志文件 is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=0 #是否记录日志: 1记录 0不记录 datef(){ date "+%Y-%m-%d %H:%M:%S" } print_log(){...print_log "[ $(datef) ] 需要检测的目录不存在: $basedir" exit fi } static_sizes(){ size=$(du -sh $basedir |awk...-ne 0 ]];then print_log "现在该目录[$basedir]不存在关键字为$file_key的文件." exit fi du -k $basedir/$file_key* |awk
//输出每行的行号 awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容 awk -F: 'NR...awk '!...|mail/{print $3+10}' /etc/passwd //第三个字段加10打印 awk -F: '/mysql/{print $3-$4}' /etc...的行,其中输出每行行号,字段4,5,6,并使用制表符分割字段 输出处理结果到文件 ①在命令代码块中直接输出 route -n|awk 'NR!...,$3,$4,$5}' OFS='\t' helloworld.sh //制表符分隔输出前5个字段,并打印行号 应用2 awk -F'[:#]' '{print NF}' helloworld.sh
log/shell #日志路径 log=$logdir/log.log #日志文件 is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=1 #是否记录日志: 1记录 0不记录 User=admin Host=192.168.1.253 Password="cccccc!...t } #获取拨号前接口的外网地址 run_res1=$(run "get interface") interface_1=$(echo "$run_res1" |grep "eth0\/1" |awk... '{print $2}' |sed "s/\/32//g") interface_2=$(echo "$run_res1" |grep "eth0\/2" |awk '{print $2}'|sed ... '{print $2}' |sed "s/\/32//g") interface2_2=$(echo "$run2_res1" |grep "eth0\/2" |awk '{print $2}'|sed
支持扩展正则匹配 -f # 从文件获取匹配规则 -i # 忽略大小写 -l # 只显示文件名 -n # 显示行号...-q # 静默,不打印结果 -r # 递归 -v # 反选,过滤内容 -w # 匹配完整单词 -z...2、基本格式 awk '{指令}' 文件名 3、基本概念 NR # 当前行的「行号」 NF # 当前行的「列数(字段个数)」 $0 # 当前行的文本内容...'{print $1 "------" $2}' demo.txt ---------------------------------------------------- # 带行号打印第二列 awk...'{print NR,$2}' demo.txt ---------------------------------------------------- # 第一列替换为行号,并打印 awk '{$1
: sed [-Options] [‘Commands’] filename;sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容其实没有修改,需要加-i参数即对文件彻底修改;x #x为指定行号...;x,y #指定从x到y的行号范围;/pattern/ #查询包含模式的行;/pattern/pattern/ #查询包含两个模式的行;/pattern/,x #从与pattern的匹配行到x号行之间的行...#查询不包括x和y行号的行;r #从另一个文件中读文件;w #将文本写入到一个文件;y #变换字符;q #第一个模式匹配完成后退出;l #显示与八进制ASCII码等价的控制字符; 常用SED工具企业演练案列...$0}’ jfedu.txt 打印jfedu.txt文件中,长度大于80的行号: awk ‘length($0)>80 {print NR}’ jfedu.txt AWK引用Shell变量,使用-...;grep -v “test” jfedu.txt 不打印test的行;grep “test[53]” jfedu.txt 以字符test开头,接5或者3的行;grep “^[^test]” jfedu.txt
log/shell #日志路径 log=$logdir/log.log #日志文件 is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=1 #是否记录日志: 1记录 0不记录 datef(){ date "+%Y-%m-%d %H:%M:%S" } print_log...sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='$line' \G; "|grep data |awk...(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='$dbname' \G; "|grep data |awk... '{print $2}') db_size=$(cat /tmp/dbstring_$random.txt |grep "M" |grep -v "0.00" |grep "^$line " |awk
/shell #日志路径 log=$logdir/shell.log #日志文件 is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=0 #是否记录日志: 1记录 0不记录 random_time=$(date +%Y%m%d_%H%M%S) datef(){ date "+...then print_log "$FUNCNAME():\033[31m用户名不能为空\033[0m" exit fi User=$(cat /etc/passwd |grep -v "nologin" |awk.../shell #日志路径 log=$logdir/shell.log #日志文件 is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=0 #是否记录日志: 1记录 0不记录 random_time=$(date +%Y%m%d_%H%M%S) #定义默认公钥 default_publicKey
grep -c "file" a.txt # 统计a.txt文件中有多少行包含"file"字符串 grep -n "file" a.txt # 在a.txt文件中有多少行匹配字符串"file",同时显示行和行号...# 输出每行的行号 awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd # 依次打印行号,字段数,最后字段值,制表符,每行内容 awk...}' /etc/passwd # 第三个字段加10打印 awk -F: '/mysql/{print $3-$4}' /etc/passwd...==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt # 输出字段6匹配WAIT的行,其中输出每行行号,字段4,5,6,并使用制表符分割字段 输出处理结果到文件...# 制表符分隔输出前5个字段,并打印行号 应用2: awk -F'[:#]' '{print NF}' helloworld.sh # 指定多个分隔符: #,输出每行多少字段
表示强制保存退出) 将文件另存为其他文件名 :w new_filename 显示行号 :set nu 取消行号 :set nonu 使本行内容居中 :ce 使本行文本靠右 :ri 使本行内容靠左 :le...命令参数说明: 参数 说明 -n或--number 显示行号 -b或--number-nonblank 显示行号,但是不对空白行进行编号 -s或--squeeze-blank 当遇到有连续两行以上的空白行...注意: sed命令不会修改原文件,例如删除命令只表示某些行不打印输出,而不是从原文件中删去。 如果要改变源文件,需要使用-i选项。 命令格式:sed [参数] [动作] [文件]。...命令格式:awk [参数] [脚本] [文件]。...awk中还可以指定脚本命令的运行时机。
> file3 将file1 file2的内容依次添加到file3当中 tac 从下往上阅读文件内容,用法同cat nl 添加行号打印,默认情况下空白行不显示行号 nl [-bnw] ${FILE_NAME...} nl -b a file1 即使空白行也显示行号 nl -b a -n rz file 空白行也显示行号,并且行号在字段的最右方显示,且行号不用加0对齐 more/less 一页一页翻动文件。...tail [-n number] ${FILE_NAME} head -n 10 file 读取文件前十行的内容 tail -n 10 file 读取文件后十行的内容 head -n -10 file 不打印文件后十行内容...主要是处理每一行的字段内的数据,而默认的字段的分隔符为空格键或tab键 awk '条件类型{动作1}条件类型2{动作2}...' filename NF:$0每一行拥有的字段总数 NR:目前awk所处理的是第几行数据...FS: 目前的分隔符 last -n 5 | awk '{print $1 "\t" $3}' #打印一行的第一段文字和第三段文字 last -n 5 | awk '{print $1 "\t lines
awk的应用场景 字符串截取 数据运算 比如内存使用率脚本 shell对输出流的处理-awk 1、awk介绍 在日常计算机管理中,总会有很多数据输出到屏幕或者文件,这些输出包含了标准输出、标准错误输出...3.3)awk对记录(行)的提取 记录提取:提取一个文本中的一行并打印输出 记录的提取方法有两种:a、通过行号 b、通过正则匹配 记录相关内置变量 NR: 指定行号 number row 提取test...第三行数据 指定行号为3 [root@zutuanxue ~]# awk 'NR==3{print $0}' test 3 the quick brown fox jumps over...~]# awk 'NR==3{print $6}' test jumps 4、awk程序的优先级 awk代码块的优先级 关于awk程序的执行优先级,BEGIN是优先级最高的代码块,是在执行PROGRAM...用空格定义每个数据字段的精确宽度 FS 输入字段分隔符号 数据源的字段分隔符 -F OFS 输出字段分隔符号 RS 输入记录分隔符 ORS 输出记录分隔符号 FIELDWIDTHS:重定义列宽并打印,注意不可以使用$0打印所有
/shell #日志路径 log=$logdir/shell.log #日志文件 is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=0 #是否记录日志: 1记录 0不记录 random_time=$(date +%Y%m%d_%H%M%S) PWD=`pwd` mongodb_pakges...print_log "解压文件中,请稍后..." tar -zxf $mongodb_pakges -C /usr/local/ mv /usr/local/$(echo $mongodb_pakges|awk...then print_log "mongodb: 数据目录:$dbpath已经存在" else mkdir -p $dbpath fi lastname=$(echo "$logpath" |awk
log/check #日志路径 log=$logdir/log.log #日志文件 is_font=1 #终端是否打印日志: 1打印 ...0不打印 is_log=0 #是否记录日志: 1记录 0不记录 key="data-camp" #进程关键字 exec_stop="/etc/init.d/data-camp...: %{time_total}\n" "https://$1:$2/verdict/session/LSGJA52U7CH055974/latest/result" |grep time_total|awk
log/check #日志路径 log=$logdir/log.log #日志文件 is_font=1 #终端是否打印日志: 1打印...0不打印 is_log=0 #是否记录日志: 1记录 0不记录 key="data-camp" #进程关键字 exec_stop="/etc/init.d/data-camp...}\n" "http://$1:$2/verdict/session/LSGJA52U7CH055974/latest/result" |grep time_total|awk
\n"); (void) fflush(stderr); password_warning_announced= TRUE; }} 阿里的印风就提交了一个patch 供大家参考。.../mysql bs=1 seek=$((16#$(objdump --disassemble -F mysql |grep password_warning|grep je|awk '{print $1.../mysql bs=1 seek=$((16#$(objdump --disassemble -F mysql |grep password_warning|grep jne|awk '{print $1...stderr); password_warning_announced= TRUE; }} 汇编代码中只需要把判断password_warning_announced的逻辑修改成直接跳转,就可以不打印出来了...//g'))) count=1 conv=notrunc 将mysql汇编文件中print_cmdline_password_warning函数中jne修改为jmp,直接跳转,不打印错误信息 七、总结
i)' test.file 打印偶数行 其他相关正则取值说明 1) 打印行号和内容 [root@localhost ~]# awk '{print NR":"$0}' test.file 1...FNR,表示当前行在文件中的行号 [root@localhost ~]# awk '{ print FNR "\t" $0 }' test.file 1 111111111111111 2...NR,表示当前行在本次处理过程中的行号 [root@localhost ~]# awk '{ print NR "\t" $0 }' test.file 1 111111111111111...原来:FNR,是每个文件中的,换了一个文件,会归零;而NR则每个文件会累加起来的 7) 使用简单样式来输出 下面表示"行号占用5位,不足补空格" [root@localhost ~]# awk '{...9) 计算行数:效果类似wc -l END表示每行都处理完了后,在执行,此时NR就是最后一行的行号,也就是总的行数了。
FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数, 根据分隔符分割后的列数 NR 已读的记录数, 也是行号 OFS.../{print $7}' passwd # -F: 以':'分隔符拆分每一个列(域)数据 运行效果 4.打印文件每行属性信息 统计passwd:文件名,每行的行号,每行的列数,对应的完整行内容: awk...-F ':' '{print "文件名:" FILENAME ",行号:" NR ",列数:" NF ",内容:" $0}' passwd # "文件名:" 用于拼接字符串 运行效果 使用printf...替代print,可以让代码阅读性更好: awk -F ':' '{printf("文件名:%5s,行号:%2s, 列数:%1s, 内容:%2s\n",FILENAME,NR,NF,$O)}' passwd...运行效果 16.显示空行行号 查询sed.txt中空行所在的行号: sed 'G' sed.txt | awk '/^$/{print NR}' 运行效果
领取专属 10元无门槛券
手把手带您无忧上云