ubuntu 操作补充 查找文件 和 awk

1.whereis 文件名
  特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来.我一般的查找都用这条命令.
  2.find / -name 文件名
  特点:准确,但速度慢,消耗资源大,例如我想找到php.ini的准确位置,就需要用
  #find / -name php.ini
  3.locate 文件名
  强力推荐的方法,最快,最好的方法.

  注意:第一次使用该命令,可能需要更新数据库,按照提示的命令执行一下就好了.


先试试在命令行这么做:echo `cat list`
然后仔细看看脚本里面 `echo $line` 的结果

cat会输出文件原本的样子。

是echo自动会把tab转换为空格,echo "$line"这种写法就避免了这种情况


uniq 命令

-c 在输出行前面加上每行在输入文件中出现的次数。
-d 仅显示重复行。
-u 仅显示不重复的行。

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
1.命令格式:
wc [选项]文件...
2.命令功能:
统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
3.命令参数:
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息
--version 显示版本信息


计算器命令 :bc 

通过管道命令送入这个计算器程序就好了

或者echo$(expr  xxxxx)



Linux中常常会使用到cut命令来分割字符串,下面说明下cut命令参数的使用:
         -d  指定分隔符,如:按照“:”分割,-d:
         -c  提取第n个字节,如:-c5,表示提取每行的第5个字节,-c5-14,表示提取每行的第5-14个字节,-c1,5,14,表示提取第1、5、14个字节。
         -f  指定输出的域
         实例:cut  –d:  -f1,2   //按照”:”来分割,并输出第1和2段
[root@centos ~]# cat test.txt
1:2:3
a:b:c
[root@centos ~]# cut -d: -f1,2 test.txt
1:2
a:b



cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1 -nr|head -100
统计文件中出现次数最多的前10个单词
使用linux命令或者shell实现:文件words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个文件中出现次数最多的前10个单词。
cat words.txt | sort | uniq -c | sort -k1 -nr | head -10
  主要考察对sort、uniq命令的使用,相关解释如下,命令及参数的详细说明请自行通过man查看,简单介绍下以上指令各部分的功能:
sort:  对单词进行排序
uniq -c:  显示唯一的行,并在每行行首加上本行在文件中出现的次数
sort -k1,1nr:  按照第一个字段,数值排序,且为逆序
head -10:  取前10行数据


NF代表:浏览记录的域的个数

$NF代表 :最后一个Field(列)


NF-3的意思是倒数第三个字段,ssh2是第-0个字段,663951是第-1个字段....
192.168.0.78是第-3个字段。

NF代表:浏览记录的域的个数

$NF代表 :最后一个Field(列)


grep "Failed" /var/log/secure | awk '{print $(NF-0)}'

{print NF} 也有{print $NF}
前者是输出了域个数,后者是输出最后一个字段的内容
如:~# echo $PWD | awk -F/ '{print $NF}'



NR,表示awk开始执行程序后所读取的数据行数.
FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计.
 
在看一个例子关于NR和FNR的典型应用:
#cat a
张三|000001
李四|000002
#cat b
000001|10
000001|20
000002|30
000002|15
 
想要得到的结果是将用户名,帐号和金额在同一行打印出来,如下:
张三|000001|10
张三|000001|20
李四|000002|30
李四|000002|15
 
awk -F'|' 'NR==FNR{a[$2]=$0;next}{print a[$1] FS $2}' a b


awk -F'|' '{a[$2]=$0}NR>FNR{print a[$1] FS $2}' a b
[解析]
由NR=FNR成立,判断当前读入的是第一个文件a,然后使用{a[$2]=$0;next}循环将a文件的每行记录都存入数组a,并使用$2作为下标引用.next,不在执行后面的语句.
由NR=FNR不成立,判断当前读入了第二个文件b,然后跳过{a[$2]=$0;next},对第二个文件b的每一行都无条件执行{print a[$1]FS$2},此时变量$1为第二个文件的第一个字段,与读入第一个文件时,采用第一个文件的$2为数组下标相同.因此可以在此输出该数组的值。

使用方法

awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

调用awk

awk [-F  field-separator]  'commands'  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。


将把字符 h 作为第二个字段的第一个字符和最后一个字符的所有记录打印至标准输出
#awk  '$2 ~ /^h/'  file
#awk  '$2 ~ /h$/'  file

# 删除每行结尾的空白(包括空格符和制表符)
awk '{sub(/[ \t]+$/, "");print}'


linux 如何显示一个文件的某几行(中间几行)

【一】从第3000行开始,显示1000行。即显示3000~3999行
cat filename | tail -n +3000 | head -n 1000
 
【二】显示1000行到3000行
cat filename| head -n 3000 | tail -n +1000
 
*注意两种方法的顺序
 
分解:
    tail -n 1000:显示最后1000行
    tail -n +1000:从1000行开始显示,显示1000行以后的
    head -n 1000:显示前面1000行
 
【三】用sed命令
 
 sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。



NF代表:浏览记录的域的个数

$NF代表 :最后一个Field(列)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值