Linux之强大的awk

2023-05-16

来自【梦想家 Haima’s blog > http://blog.dreamwe.cn】

awk简介

awk是Linux中的一个命令,用来做文本处理与分析,功能简单强悍,同时它也是一门编程语言。
awk处理文本文件时,以行为单位,可以高效的对日志文件进行处理。

awk的man文档简介摘要:

NAME

   gawk - pattern scanning and processing language  //awk其实是gawk,文本匹配查询和
处理语言,

SYNOPSIS

    gawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...
    gawk [ POSIX or GNU style options ] [ -- ] program-text file ...

    pgawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...
    pgawk [ POSIX or GNU style options ] [ -- ] program-text file ...


    Gawk is the GNU Project?. implementation of the AWK programming language.  It
    conforms to the definition of the lan-
    guage in the POSIX 1003.1 Standard.  This version in turn is based on the 
description in The  AWK  Programming  Lan-
    guage,  by  Aho,  Kernighan, and Weinberger, with the additional features
 found in the System V Release 4 version of
    UNIX awk.  Gawk also provides more recent Bell Laboratories awk extensions, 
and a number of GNU-specific extensions.




【释】第一段英文大致说了,Gawk是GNU(通用许可开源)项目,源于unix awk,并支持更多的贝尔实验
室awk的扩展。看起来Linux中的awk(gawk)是很牛叉的。废话不多说,马上就来认真学习一下。

使用方式

命令常见使用方式如下

方式一:awk [options] 'script' [var=value] file(s) 
方式二:awk [options] -f scriptfile [var=value] file(s)

【解释】 其中 options是命令选项。方式一:'script'指awk的处理程序,执行程序。var=value是
变量,file(s) 表示被处理的文本文件,可以一次性处理多个文本文件。方式二中-f scriptfile
表示将处理程序放到一个文本中,当作脚本文件。

选项-F fs

指定分隔符,awk中的默认分隔符是空格 ” “,默认以空格符分隔行文本。

选项在man文档中的摘要

-F fs
   --field-separator fs //指定分隔符
          Use fs for the input field separator (the value of the FS prede-
          fined variable).  

eg

[案例1] //默认字段分隔符为" "
# echo "hello hh"| awk '{print $1;print $2}'
hello
hh

【解释】 案例中,并没有出现-F选项,此时默认分隔符为" " 将hello hh分隔为两段,再分别打印
字段一:“hello”,再打印字段二:“hh”。$1和$2是位置变量,分别表示第一个字段和第二个字段。

[案例2]
# echo "hello:hh"| awk -F :  '{print $1;print $2}'
hello
hh

【解释】通过-F指定分隔符为":" 分隔 hello:hh ,然后同 [案例1]

位置变量 0, 1,$2..

nnn 0表示整行
NF NF-1表示倒数第二个位置,以此类推

eg
[案例1]
# cat pass.log //要处理的目标文件 pass.log 笔者截取了一段/etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

# awk -F : '{print ;}' pass.log 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

【解释】 "print;" 默认也是打印整行,同$0 


[案例2]
# awk -F : '{print $0;}' pass.log 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

【解释】 "print $0;" 打印整行

eg

# awk -F : '{print $1 "   "  $NF;}' pass.log 
root   /bin/bash
bin   /sbin/nologin
daemon   /sbin/nologin

【解释】打印被 ":" 分隔后第一个位置上的字符串,然后再打印最后一个位置,中间输入空格方便查看

选项-f program-file

将脚本写到文本文件中去,通过选项-f将awk命令的处理程序指定到某个脚本文件中,当处理程序复杂的时候通常采用这种方式。

man文档摘要

-f program-file 
    --file program-file //--file 和-f效果相同
         Read the AWK program source from the file program-file,  instead
         of  from  the  first  command  line  argument.   Multiple -f (or
         --file) options may be used.

eg

[案例一]

# vi sc.awk //编辑脚本
{print $1 "   "  $NF} //将执行文件写入 sc.awk中
//vi编辑器,保存sc.awk文档退出。


# awk -F : -f sc.awk  pass.log  //pass.log和前文中pass.log相同。
root   /bin/bash
bin   /sbin/nologin
daemon   /sbin/nologin

【解释】 将前文中案例 【#awk -F : '{print $1 "   "  $NF;}' pass.log】 中的
'{print $1 "   " $NF;}'写到了 sc.awk中,此时,处理程序不用再用放在单引号''中了。

【注意】如果对vi不熟悉,可以用echo "{print $1 "   "  $NF}" >sc.awk  来新建程序文件

awk程序结构

awk处理程序由 BEGIN,主体,END 构成
BEGIN语句块 BEGIN{}

eg

# vi sc.awk //编辑脚本
# awk program's Begin block  //【注意】这句话是脚本里的注释,不是命令
BEGIN{print "here is the awk begin!!"} //BEGIN语句快
{print $1 "   "  $NF}    


# awk -F : -f sc.awk  pass.log 
here is the awk begin!! //BEGIN语句块 的输出效果 
root   /bin/bash
bin   /sbin/nologin
daemon   /sbin/nologin

【解释】 上面案例可以看出,BEGIN语句块中的代码会在程序最前面执行。且只执行一次。

主体部分,主题部分用 {} 表示,写在BEGIN之后,END之前。前文中使用的’{print}’都是程序主体。

eg

# vi sc.awk //编辑脚本
# awk program's main block //【注意】这句话是脚本里的注释,不是命令
BEGIN{print "here is the awk begin!!"}
{
        print "this is main"
        print $1
}

# awk -F : -f sc.awk  pass.log 
here is the awk begin!!
this is main    // 执行 主体部分中的 print "this is main"
root            // 执行 主体中的print $1
this is main
bin
this is main
daemon


【解释】 主体中的代码,没处理一行就会被执行一次。

END语句块
和BEGIN语句块相似 END{} 命令最后会被执行,也仅被执行一次

eg

# vi sc.awk //编辑脚本
# awk program's end block //【注意】这句话是脚本里的注释,不是命令
BEGIN{print "here is the awk begin!!"}
{
    print $1
}

END{    
    print "ok,awk operate to the end"   //end模块打印语句
}

# awk -F : -f sc.awk  pass.log 
here is the awk begin!!
root
bin
daemon
ok,awk operate to the end   //end模块的执行效果

变量

在awk的处理程序中可以申明变量,和使用变量。
申明方式 varName=varValue

eg | 通过变量,计算文件的行数

# vi sc.awk //编辑脚本
# awk program's var block //【注意】这句话是脚本里的注释,不是命令
BEGIN{
        nu=0;           //申明一个变量表示行号
}

{
    nu ++;              //每处理一行数据,行号自动增加1
    print nu " " $0    //输出行号和 第一个字段
}

END { 
    print "totall lines is " nu;    //最后打印总共的行数,即最后一行行号
}

# awk -F : -f sc.awk  pass.log 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
totall lines is 3

【解释】 nu=0为变量申明,使用的时候,直接使用nu即可。不用像bash里用$打头

命令变量

我把它叫做命令变量,是因为变量是从命令中传入的,而并非awk命令中自定义的。
从命令外部引入变量,可以通过命令选项 [var=value] 把shell中的变量引入到awk处理程序中

方式一: awk [options]  -v varname=varvalue 'script' file(s) 
方式二: awk [options] 'script' varname=varvalue  file(s) 

【解释】方式一是通过-v选项传入,方式二是 man手册里的选项[--]

eg | 方式一

# awk -F : -v  aa="haima"  '{print aa " " $1}' pass.log 
haima root
haima bin
haima daemon

【解释】 {print aa " " $1} 打印了命令中传入的变量aa,aa的值是haima。然后再打印 $1

eg | 方式二

# awk -F :  '{print aa " " $1}' aa="haima"  pass.log 
haima root
haima bin
haima daemon

内置变量

内置变量是awk程序中系统自带的变量,分别都有各自的意义

FS 字段分割符,在程序中【FS=":";】相当于 命令中使用 【-F :】
IGNORECASE 是否忽略大小写,IGNORECASE=true则匹配时不区分大小写 
NF 表示字段数,在执行过程中对应于当前的字段数 
NR 表示记录数,在执行过程中对应于当前的行号
OFS 输出字段分隔符(默认值是一个空格)
ORS 输出行记录分隔符(默认值是一个换行符)

IGNORECASE在笔者系统上没测试通过 centos6.5

eg | FS

# vi sc.awk 
# awk program's FS  //【注意】这句话是脚本里的注释,不是命令
BEGIN{
        FS=":" //用HAIMA 去分割,
}

{
        print $1
}

# awk -f sc.awk  pass2.log 
root
bin
daemon

【解释】 FS=":" 需要在BEGIN中指定,效果与令行中使用 -F :相同

eg | NF NR

# vi sc.awk 

# awk program's NF NR //【注意】这句话是脚本里的注释,不是命令
{
        print  NR   " totall fileds" NF // 打印行号,打印切割后的段
}

END{
        print "line numbers:" NR //END中能打印到行数

 }

# awk -F:  -f sc.awk pass.log 
1 totall files:7
2 totall files:7
3 totall files:7
line numbers:3

【注意】 在END中不能打印到字段数NF

eg|OFS ORS

# awk -F : 'BEGIN{OFS="|";ORS=" LinEnd\n"}{print $1, $2;}'  pass.log 
root|x LinEnd
bin|x LinEnd
daemon|x LinEnd


【解释】 在BEGIN模块中申明了OFS="|",输出字段分隔符是“|” ,而 ORS=" LinEnd\n" 申明了输出
行分隔符为"linEnd\n"  其中"\n"是 换行符,如果没有“\n” ,将直接输出一行

【注意】 “{print $1, $2;}” 时,必须用 "," 连接。如果 {print $1 $2} 字段分隔符将失效。因
为空格在awk程序中可以连接两个字符串。

awk的工作原理

通过前面的案例,已经大概了解awk的功能。下面再总结一下awk的工作流程。

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'  

第一步:执行BEGIN{ commands }语句块中的语句;

第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描
文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

第三步:当读至输入流末尾时,执行END{ commands }语句块。 

BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打
印输出表格的表头等语句通常可以写在BEGIN语句块中。

END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总
都是在END语句块中完成,它也是一个可选语句块。 

pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认
执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

【注意】awk中的内置变量。不同的内置变量的作用域有所不同。使用的时候,需要注意在awk执行的某
些阶段,该内置变量是否可用。

流程控制

if … else if… else
awk可以用类似java中的if语句来做逻辑控制

语法结构如下:

if(表达式)
    {语句1} 
else if(表达式) 
    {语句2}
else
    {语句3} 

eg

# vi nsc.awk  //新建一个awk程序
# test for  "if.. else if.. else " //程序注释,非指令
{
 if(NR%2==0)
    { print $2 " evenline"}    //偶数行就 输出第二个字段和 evenline
else if (NR%3==0) 
    {print $3 " thrirdline"} //被3整除的行,就输出第三个字段 和 thrirdline
else
     {print $NF " othersLine"} //其他就输出 最后一个字段 和 othersLine

# awk -F :  -f nsc.awk  /etc/passwd 
/bin/bash othersLine
x evenline
2 thrirdline
x evenline
/sbin/nologin othersLine

循环语句

awk也支持for,while,do..while三种循环语句,语法与java中基本相同

for 循环

格式: for(变量;条件;表达式) {语句}

# awk 'BEGIN{ total=0; i=0; do {total+=i;i++;} while(i<=100) print total; }'
5050

while循环

格式:while(表达式) {语句}

# awk 'BEGIN{ test=100; total=0; while(i<=test){ total+=i; i++; } print total; }'
5050

do..while

格式:do {语句} while(条件)

# awk 'BEGIN{ total=0; i=0; do {total+=i;i++;} while(i<=100) print total; }'
5050

# awk 'BEGIN{ total=0; i=1000; do {total+=i;i++;} while(i<=100) print total; }'
1000    //虽然i一开始就满足i<=100  但do中还是执行了一次,所以打印total为 1000

【注意】do.. while 循环语句至少一次循环,先执行do里面的内容,再判断,所以这样。

break,continue

awk同样也支持break和continue控制。break和continue必须在循环体中使用。
break是直接跳出循环,不再执行循环
continue是跳到下次循环

next控制

next 从单词的意思看起来和我continue相似。确实如此,next具有continue很相似的功能,只是next是跳出本行数据处理,处理下一行数据,而continue是跳出本次循环,执行下次循环。

eg | 跳过 行号为6-9行的数据

# awk -F :  '{if(NR>5&&NR<10)next; print NR, $1}' /etc/passwd
1 root
2 bin
3 daemon
4 adm
5 lp
10 uucp
11 operator
12 games
13 gopher
14 ftp
15 nobody

【解释】 if(NR>5&&NR<10)next; 当行号在 6-10,直接跳过本行数据的处理。
【注意】 因为next是跳过某个记录,或者说某行数据的处理,所以next只能出现在awk的主体中,不能
出现在BEGIN 块,也不能出现在 END模块中,会报错。

exit 控制

退出当前还没有执行的主体内容,如果END块中有内容,则执行END块中的内容。此时就会出现三种情况。

情况一:exit在BEGIN块中使用,从exit当前位置退出,直接执行END块
情况二:exit在主体中使用,从exit当前位置退出,直接执行END块
情况二:exit在END块中使用,从exit当前位置退出,已经退出END快,所以不再执行了。

eg | exit在主体中使用。

# awk -F :  '{if(NR>5){exit};print NR, $1}END{print "end"}' /etc/passwd
1 root
2 bin
3 daemon
4 adm
5 lp
end

【解释】当行号NR>5时,退出主体,再执行print "end"

eg | exit在BEGIN或END中使用

# awk -F : '{print"begin";exit;print"hh"}{print NR, $1}END{print "end"}' /etc/passwd
begin
end

【解释】print "begin" 执行完后,直接跳到了END模块执行 print "end"

awk中的正则表达式

awk可以利用正则表达式来筛选数据,以达到更强大的处理能力

用于记录筛选

记录筛选,以一条记录作为筛选的单位

awk [options] ‘script’ [var=value] file(s) 在此主体格式不变的情况下,在script前面加入筛
选,此时,’script’ 程序形式变成:’(/express/){awk处理程序}’,其中/express/是正则表达式

手动创建一个文件target.log 并写好内容如下

# cat target.log //查看target.log
27.19.74.143 - - GET /static/image/common/faq.gif HTTP/1.1" 200 1127
110.52.250.126 -  GET /data/cache/style_1_widthauto.css?y7a HTTP/1.1" 200 1292
27.19.74.143 - - GET /static/image/common/hot_1.gif HTTP/1.1" 200 680
27.19.74.143 - - GET /static/image/common/hot_2.gif HTTP/1.1" 200 682
27.19.74.143 - - GET /static/image/filetype/common.gif HTTP/1.1" 200 90
110.52.250.126 -  GET /source/plugin/wsh_wx/img/wsh_zk.css HTTP/1.1" 200 1482
110.52.250.126 -  GET /data/cache/style_1_forum_index.css?y7a HTTP/1.1" 200 2331
110.52.250.126 -  GET /source/plugin/wsh_wx/img/wx_jqr.gif HTTP/1.1" 200 1770
27.19.74.143 - - GET /static/image/common/recommend_1.gif HTTP/1.1" 200 1030
110.52.250.126 -  GET /static/image/common/logo.png HTTP/1.1" 200 4542
110.44 -  GET /static/image/common/logo.png HTTP/1.1" 200 4542

【注意】 最后一行数据是  不正常的数据。ip 的格式不对

eg | 筛选出包含.gif的行

# awk '(/gif/){print $0}' target.log 
27.19.74.143 - - GET /static/image/common/faq.gif HTTP/1.1" 200 1127
27.19.74.143 - - GET /static/image/common/hot_1.gif HTTP/1.1" 200 680
27.19.74.143 - - GET /static/image/common/hot_2.gif HTTP/1.1" 200 682
27.19.74.143 - - GET /static/image/filetype/common.gif HTTP/1.1" 200 90
110.52.250.126 -  GET /source/plugin/wsh_wx/img/wx_jqr.gif HTTP/1.1" 200 1770
27.19.74.143 - - GET /static/image/common/recommend_1.gif HTTP/1.1" 200 1030

eg | 筛选出数据不正常的行(target.log中最后一行数据为错误数据)

#awk --posix '!/([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}/{print $0}' target.log
110.44 -  GET /static/image/common/logo.png HTTP/1.1" 200 4542  

【解释】 筛选行,首先选出行中含有IP格式,ip格式用/([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}/
匹配,前面加 ! 表示取非,也就是不含ip格式的行,被打印出来

【注意】笔者查询了一下, 在gawk 4.0以下版本中使用{n,m}这样的正则,需要在在前面加上
--re-interval或--posix选项。

用于字段筛选

awk也可通过筛选某个字段,来筛选某一行
在正则表达式前面 n  n字段满足正则筛选 nn n !~ 表示 n n表示第n个字段
使用 0  0表示整行的意思

eg| 用 “:” 切割/etc/passwd,筛选出用户名长度为4的用户

# awk --posix -F :  '$1~/^.{4}$/{print $1}' /etc/passwd
root
sync
halt
mail
uucp
dbus
vcsa
abrt
sshd

【注意】笔者查询了一下, 在gawk 4.0以下版本中使用^$这样的正则,需要在在前面加上
--re-interval或--posix选项。

eg| 用 “:” 切割/etc/passwd,筛选出用户名长度不为4的用户

# awk --posix -F :  '$1!~/^.{4}$/{print $1}' /etc/passwd
bin
daemon
adm
lp
shutdown
operator
games
gopher
ftp
nobody
usbmuxd
rtkit
//此处省略部分结果行

【注意】笔者查询了一下, 在gawk 4.0以下版本中使用^$这样的正则,需要在在前面加上
--re-interval或--posix选项。

用在表达式中

正则表达式用在返回值为true/false的表达式中,同样用~,!~匹配,匹配成功则返回true

eg | 处理/etc/passwd 匹配行数为二十多的

# awk --posix -F :  '{if(NR ~ /^[2][0-9]$/)print NR,$1}' /etc/passwd
20 avahi-autoipd
21 abrt
22 haldaemon
23 gdm
24 saslauth
25 postfix
26 ntp
27 apache
28 pulse
29 sshd

【解释】 NR为内置变量行号,行号匹配正则表达式为/^[2][0-9]$/,则打印行号NR,第一个字段

更多精彩见 【梦想家haima’s blog】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux之强大的awk 的相关文章

  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do

随机推荐

  • Linux 面试最常问的十个问题

    如果你要去面试一个Linux系统运维工程师的职位 xff0c 下面这十个最常见的问题一定要会 xff0c 否则你的面试可能就危险了 这些都是比较基本的问题 xff0c 大家要理解 xff0c 不能光死记硬背 1 如何查看系统内核的版本 这里
  • 处理iOS开发中的各种警告

    iOS开发中我们会遇到各种警告 包括第三方不再支持更新导致的警告 苹果一些过时方法的警告 其中尤其是ASIHttpRequest的不支持更新导致有很多的警告 所以我在这里做了罗列 Semantic Warnings WarningMessa
  • c#利用虚拟串口工具进行串口通信数据的发送和接收

    原文 xff1a 我的个人博客 串口通信 串口通信 xff08 Serial Communications xff09 的概念非常简单 xff0c 串口按位 xff08 bit xff09 发送和接收字节 尽管比按字节 xff08 byte
  • stm32 移植 FreeRTOS

    1 建立裸机工程 在移植 freeRTOS 之前需要创建一个 stm32f103 的 keil5 裸机工程 所谓裸机工程就是包含 stm32f103 单片机的启动文件 xff0c 外设驱动固件库的文件集合 xff0c 也可以说是支持裸机开发
  • ESP32(Espressif-IDE)添加外部(.c .h)文件 (error:undefined reference to)

    0x00 xff1a 前言 笔记文件 用习惯了keil和iar之类的开发软件 xff0c 一下子转换到ESP32是特别的不习惯 xff0c 这里使用的开发环境是乐鑫官方推出的Espressif IDE xff0c 也是刚学折腾ESP32 x
  • 无人机地面站源码搭建环境(qt版)记录

    最近基于项目需要 xff0c 借鉴无名创新的QT版开源地面站 xff0c 搭建一款测试平台 原本以为比较简单的 但是在搭建过程中还是遇到了很多看不见的坑 xff0c 在这里分享给大家 xff0c 避免别人在开发类似项目时像我这样走弯路 基本
  • 如何才能有论文创新点?idear

    1 看别人是怎么解决问题的 xff0c 别人写的每一篇论文都是在解决问题 2 看自己领域综述性论文 xff0c 对某一问题都是一步步发展出来的 xff0c 某一方法也是一步一步更新完善的 xff0c 这些解决的都是问题 3 看一篇论文的引言
  • 前端图片裁剪cropper.js

    背景 xff1a 我们在项目中常常都会有更换登陆人头像的需求 xff0c 这个很简单直接上传一张图片展示就可以了 xff0c 但是如果上传的图片需要剪裁成正方形的话就需要我们来做一些特殊的处理 xff1b 这里我们会用到一个图片剪裁插件 x
  • 新产品开发之C流程 (C-flow)

    关于新产品开发的C流程 C flow xff0c 是世界上大公司采用的标准开发流程 xff0c 十分基本也十分重要 xff0c 但是网上关于C流程介绍相关的资料很少 xff0c 所以花点时间整理一下相关的资料 下面以软件BSP开发为例 xf
  • Arduino的Stepper库函数及其控制步进电机(ULN2003)调速

    问题来源 最近自学Arduino xff0c 在使用步进电机时开始没能使步进电机转起来 xff0c 转起来后感觉没法调速 xff0c 遂完成此篇笔记供自己后续查阅以及方便遇到相同问题的诸君寻找灵感 对于如何使步进电机转动就不详述 xff0c
  • 一、电脑端实现单片机与ESP8266的通信

    1 准备工具 xff08 硬件 软件 xff09 硬件 xff1a 51单片机开发板 ESP8266无线模块 xff08 ESP8266 01 xff09 TTL USB串口 杜邦线 数据线 xff1b 软件 xff1a keil uv4单
  • 错误 LNK2038 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(main.obj 中)

    前言 vs2019报错如下图 xff1a 错误 LNK2038 检测到 ITERATOR DEBUG LEVEL 的不匹配项 值 2 不匹配值 0 main obj 中 错误原因 1 产生这个问题的原因是当前工程是Debug版本 xff0c
  • 三种获取字节码对象的方式及区别

    方式一 xff1a 对象 getClass 方法是 根对象Object的方法 是其他类继承Object的getClass方法 方式二 xff1a 类名 class xff0c 你可以理解为字节码本身就是静态的 xff0c 类加载的时字节码就
  • 关于接口与Object 类的关系

    看到这个标题 xff0c 你或许就会想好自己的那份答案 但事实上这个确实没有答案 xff0c 至少没官方证明它们之间的基友关系 看法一 xff1a 因为老师说 xff0c 你可以把接口看作是特殊的类 xff0c 所以不假思索的就认为接口也
  • 单词博弈Java实现(借鉴“miss若尘”博客中写的解题思路)

    单词博弈Java实现 xff0c 已经通过庞果网的用例测试 代码如下 import java util HashMap public class WordGameFinalTest public static int who String
  • 我的2013,梦在路上

    我的2013 xff0c 在路上 今年最后一次给姐姐打电话 xff0c 她在那里像我炫耀自己和爸爸妈妈一起跨年 xff0c 说1314的意义 xff0c 而我还在北京苦逼着 回想2013年对于我来说 xff0c 或许是不错的一年 这一年我进
  • mysql安装时的粗心错误:last error unable to update security settings. access denied for user 'root' @ 'localh

    来自 梦想家haima 39 s blog gt http blog dreamwe cn 这个报错出现在mysql最后 当你看到mysql的最后一步需要设置密码可能你开心得很 Mysql就快安装好了 赶快输入三行密码都是root 结果报下
  • @SuppressWarnings

    简介 xff1a java lang SuppressWarnings是J2SE 5 0中标准的Annotation之一 可以标注在类 字段 方法 参数 构造方法 xff0c 以及局部变量上 作用 xff1a 告诉编译器忽略指定的警告 xf
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • Linux之强大的awk

    来自 梦想家 Haima s blog gt http blog dreamwe cn awk简介 awk是Linux中的一个命令 xff0c 用来做文本处理与分析 xff0c 功能简单强悍 xff0c 同时它也是一门编程语言 awk处理文