首页 > 系统相关 >linux下awk内置函数的使用(split/substr/length)

linux下awk内置函数的使用(split/substr/length)

时间:2023-06-06 21:13:12浏览次数:45  
标签:返回 print substr length awk split linux 字符串

一、split 初始化和类型强制
awk的内建函数split允许你把一个字符串分隔为单词并存储在数组中。你可以自己定义域分隔符或者使用现在FS(域分隔符)的值。
格式:

split (string, array, field separator)
split (string, array) -->如果第三个参数没有提供,awk就默认使用当前FS值。

例子:
例1:替换分隔符

time="12:34:56"
out=echo $time | awk '{split($0,a,":");print a[1],a[2],a[3]}'
echo $out
例2:计算指定范围内的和(计算每个人1月份的工资之和)

[root@test ~]# cat test.txt
Tom   2012-12-11 car 53000
John   2013-01-13 bike 41000
vivi 2013-01-18 car 42800
Tom   2013-01-20 car 32500
John   2013-01-28 bike 63500
[root@test ~]# awk '{split($2,a,"-");if(a[2]==01){b[$1]+=$4}}END{for(i in b)print i,b[i]}' test.txt
vivi 2800
Tom2500
John4500
二、substr 截取字符串

    返回从起始位置起,指定长度之子字符串;若未指定长度,则返回从起始位置到字符串末尾的子字符串。

格式:
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
例子:[root@test ~]# echo "123" | awk '{print substr($0,1,1)}'
解释:

awk -F ',' '{print substr($3,6)}' ---> 表示是从第3个字段里的第6个字符开始,一直到设定的分隔符","结束.
substr($3,10,8) ---> 表示是从第3个字段里的第10个字符开始,截取8个字符结束.
substr($3,6) ---> 表示是从第3个字段里的第6个字符开始,一直到结尾

三、length 字符串长度
length函数返回没有参数的字符串的长度。length函数返回整个记录中的字符数。

[root@test ~]# echo "123" | awk '{print length}'

awk的字符串函数substr

substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

实例操作

$ awk ‘$1”L.Transley” {print substr($1, 1,5)}’ grade.txt
L.Tan
上面例子中,指定在域1的第一个字符开始,返回其前面5个字符。
如果给定长度值远大于字符串长度, awk将从起始位置返回所有字符,要抽取L.Tansley的姓,只需从第3个字符开始返回长度为7。可以输入长度99,awk返回结果相同。
$ awk ‘{$1
”L.Transley” {print substr($1, 3,99)}’ grade.txt
Transley
substr的另一种形式是返回字符串后缀或指定位置后面字符。这里需要给出指定字符串及其返回字串的起始位置。例如,从文本文件中抽取姓氏,需操作域1,并从第三个字符开始:
$ awk ‘{print substr($1, 3)}’ grade.txt
Troll
Transley

还有一个例子,在BEGIN部分定义字符串,在END部分返回从第t个字符开始抽取的子串。
$ awk ‘{BEGIN STR=”A FEW GOOD MEN”} END {print substr(STR,7)) grade.txt
GOOD MEN

标签:返回,print,substr,length,awk,split,linux,字符串
From: https://www.cnblogs.com/zhugq02/p/17461713.html

相关文章

  • 202306062001-《远程Linux服务器——安装tomcat8、jdk1.8、mysql5——mysql 用sql建表
    因createtable...提示格式错误,什么NAME啊...,必查了一下,要设置,好多条语句(5条左右),是设置格式的。 但设置完了,说重启mysql,就失效,要重新设置(5条sql重新执行一遍!) 永久有效的解决办法是:修改“my.cnf”,我的修改如下:[client]default-character-set=utf8[mysql]default-......
  • Linux 安装Kafka及远程访问
    下载wget 官网tar-zxvfkafka_2.13-2.5.0.tgz启动kafka和zookeeper编写一个sh文件启动/opt/kafka_2.13-3.0.0/bin/zookeeper-server-start.sh/opt/kafka_2.13-3.0.0/config/zookeeper.properties&sleep5/opt/kafka_2.13-3.0.0/bin/kafka-server-start.sh/opt/kafka_......
  • Linux的发行版本
         Linux的发行版确实有很多,对于出学者来说,选择一个适合自己的版本很重要。随着LInux的不断发展,出现了很多不同的LInux的发行版本。比如RedHat、Centos、Debian、Ubuntu、SUSELinux等。那么多的发行版本其实会遵循相同的标准规范,只不过是一些开发商在开发的过程中,都......
  • linux shell if else 多个选择条件的判断语句 语法
    该脚本为,如果满足i等于mysql、information_schema、performance_schema、db_sys_stat其中一个那么就跳出执行下面的。重点介绍:if条件语句[]左右两个都要有一个空格。#!/bin/bash#2012-12-25bycocoforiin`cat./db_list.txt`doif["$i"=="mysql"]||["$i"==......
  • EasyNTS上云网关现已支持Linux ARM架构客户端
    EasyNTS上云网关管理平台可集中管理所有接入的EasyNTS上云网关设备,实现接入与管控、动态组网、远程运维、文件传输、远程指令调用等功能,从终端到云端,形成了一整套的上云网关解决方案,极大地解决了现场无固定IP、端口不开放、系统权限不开放等问题。在之前的EasyNTS版本中,后台管理页......
  • Linux系统下如何保持进程在SSH客户端断开后仍继续运行?
    使用场景在Linux系统中,在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开SSH连接或关闭客户端软件,否则可能会导致执行中断。本文介绍两种保障程序在您退出登录后持续运行的方法。方法1:使用nohup命令1.命令格式nohup,可以使运行的命令忽略SIGHUP信号。因此,即使退出登录......
  • linux sed文本内容
    目录一、sed命令二、sed操作符三、sed打印四、sed删除五、sed替换六、sed添加 七、实验演示1.提取版本号2.查看指定时间日志               一、sed命令-e执行多个命令-f使用指定脚本在处理输入文件-h显示帮助......
  • Linux 查看系统版本和内核版本
    内核版本:$cat/proc/version系统版本:$rpm-qcentos-release参考资料:查看linux系统版本命令javascript:void(0)......
  • Linux sed 命令的使用方法
    1、linuxsed命令详解2、sed命令http://man.linuxde.net/sed3、Sedandawk笔记之sed篇:基础命令http://kodango.com/sed-and-awk-notes-part-3sed-i"s/zk.addr=.*/zk.addr=$ZOOKEEPER_IP/g"$adapter_conf表示被替换的内容zk.addr=.*表示替换后的内容zk.addr=$ZOOKEEPER_......
  • Linux 创建用户、赋予用户权限、修改文件夹权限、修改只读文件
    创建用户#useraddwork设置用户密码#passwdwork赋予用户权限方法一:修改/etc/sudoers文件,找到下面一行,把前面的注释(#)去掉##Allowspeopleingroupwheeltorunallcommands%wheelALL=(ALL)ALL然后修改用户,使其属于root组(wheel),命令如下:#usermod-grootwork......