2016-08-10 10:59:48 Del_Zhu 阅读数 14245
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19280 人正在学习 去看看 马永亮

参考自:http://www.cnblogs.com/kerrycode/p/4391859.html

查找大文件

//列举出当前目录所有大于800M的文件
find . -type f -size +800M

第一个方法只用到了一个命令find,它能够帮我们做一些文件查找的操作。它常用的参数有:
- type:类型。POSIX支持——b:块设备文档、d:目录、c:字符设备文档、P:管道文档、l:符号链接文档、f:普通文档
- name:按文件名查找。支持*模糊匹配
- size:文件大小。+表示大于,-表示小于。支持k,M,G单位。

find . -type f -size +800M | xargs ls -lh

第二个方法又进了一步,不仅把大于800M的文件列出来,还进一步对他们分别做了ls -lh操作。这里新出现了一个xargs命令。它的作用就是把管道进来的参数切分成多个部分,分别作为新的参数调用后续的命令。比如这里,xargs管道进来的是找到的所有文件绝对路径,把他们作为ls -lh参数,也就是打印出每个文件的具体信息。

find . -type f -size +800M | xargs du -hm | sort -nr

第三个方法则分别对找出来的数据进行排序。du命令即disk usage,是用来统计文件占用磁盘大小的。sort顾名思义是排序的。具体就不说了,这两个是比较简单的命令。

查找大目录

du -h --max-depth=1
du -hm --max-depth=2 | sort -n
du -hm --max-depth=2 | sort -nr | head -12
2018-06-03 17:18:48 cjqh_hao 阅读数 1217
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19280 人正在学习 去看看 马永亮

awk一行数据的部分属性去重统计

awk '{print $7}' base.20180514.log | grep 'keyword' | awk -F '?' '{print $2}' | awk -F '&' '{print $1}' | uniq

sed统计一个时间段的日志数量

sed -n '/2018-05-16 21:00:00/, /2018-05-16 22:30:00/p' base.20180516.log | grep 'keyword' | wc -l

sed统计一个时间段的请求日志,请求次数第二的url及次数

sed -n '/2018-06-02 17:05:19/, /2018-06-02 17:09:19/p' request.20180602.log | awk -F ':' '{print $8}' | awk -F '?' '{print $1}' | awk -F ' ' '{print $1}' | sort | uniq -c | sort -nrk 1 | head -n 2 | tail -n 1

sort 参数列表

-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位

uniq 参数列表

 -d, --repeated          //只输出重复的行  
 -D, --all-repeated      //只输出重复的行,不过有几行输出几行  
 -f, --skip-fields=N     //-f 忽略的段数,-f 1 忽略第一段  
 -i, --ignore-case       //不区分大小写  
 -s, --skip-chars=N      //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符  
 -u, --unique            //去除重复的后,全部显示出来,根mysql的distinct功能上有点像  
 -z, --zero-terminated   end lines with 0 byte, not newline  
 -w, --check-chars=N      //对每行第N 个字符以后的内容不作对照  
 --help              //显示此帮助信息并退出  
 --version              //显示版本信息并退出  

参考文档
1 http://www.gnu.org/software/gawk/manual/gawk.html#Getting-Started

2016-08-31 10:55:12 longxiadaiwang 阅读数 1923
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19280 人正在学习 去看看 马永亮

标题写的可能不是很好懂,那么就直接举例吧。

示例:,这是随便创建的一张表。

问题描述:我们现在想从表中取出每一个年龄段的一位用户进行电话回访。


解决思路:1.先查找出表中所有的年龄段。 2.对于每个年龄段取第一行,获取到相应数据后,进行数据合并。

首先想到的方法是先使用distinct取出表中的Age,然后去遍历取出的Age,对于每个Age再到表中取需要的数据,最后对零散遍历到的数据进行合并或者逐条存入临时表。


问题来了,如果我们需要对获取到的最终数据进行关联查询,那么就需要进行多步操作,这样虽然可以有助于我们理解程序,可是对于写代码的人来说无疑是痛苦的,本来一句话就可以完成的事为啥非要写的那么繁琐呢!


所以,换个思路,我们无非是想对于满足条件组中的某个条件的数据只取任意一条就够了。这个条件组就是我们的年龄段。满足任意一个年龄的数据只去一行数据即可。

于是我们先对条件进行分组,然后对满足组条件的数据取最小值,或者最大值即可(最小值或最大值的字段不能出现重复,比如当前示例中的电话号码是不可能出现重复的)。

那么整条语句就可以比较轻松的拼出来  select min(Telephone) from tbl_user group by Age;


看到这,有些朋友就会问了,如果要取的字段可能会出现最小值或者最大值重复怎么办?

无妨,咱们再换种思路,其实和上面的思路很相似,但适用性更广一些。 先使用条件组进行数据排序,这样每个条件的数据就会自动梳理在一起,咱们就取符合条件组中每个条件的第一行就行。这样即使是有重复或者完全相同数据,也只会取出第一条和条件匹配的。语句如下:

select Telephone from (
select  Telephone,  ROW_NUMBER() OVER (PARTITION BY Age ORDER BY Age) NewIndex from tbl_user  )  a

WHERE a.NewIndex = 1 


2017-05-08 20:24:31 Cozz1995 阅读数 1530
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19280 人正在学习 去看看 马永亮

awk命令个人总结(以CentOS 6.3环境下shell为例)

最近学了一点Shell里的awk命令基础。下面根据自己所学做一些总结,仅供日后翻阅。如有错误,烦请指正。


awk是什么?

awk其实算是一种编程语言,仔细拓展开可以有好多好多内容,而我学的知识一点皮毛,可能连入门都算不上了。在Linux下,awk可以用来对一些文本数据进行筛选和扫描处理。

awk是怎么工作的?

awk一般可以搭配管道符使用,将送入awk出来的文本文件扫描处理。对于文件的名字赋予$0,即第一个位置变量。awk一次扫描一行文本,从第一行到最后一行,寻找匹配要求的行,进行用户操作。awk默认的分隔符是空格或者制表符,每一行依据分隔符,分为多个列,或者更准确讲是数据段,分别赋予$1、$2…..
基本结构如下

       `awk '条件1{操作1}条件2{操作2}'`文件名

条件:一般是关系表达式
操作:默认处理是print打印输出处理行

awk的两个特殊条件

BEGIN和END,这两个放在条件位置,可以使在其他命令执行前或执行后进行BEGIN和END对应的指令。具体下面再举例子说明。

awk的基本选项

-F 指定分隔符,-F后面加指定的分隔符
-f 指定脚本,-f后面加脚本文件,从该脚本中读取awk命令,代替输入

awk使用例子

1.先正则表达式匹配整个test文档里的空白行,每一个空白行打印一次 “blank line”

 awk '/^$/{print "blank line"}' test

2.正则表达式匹配/etc/sysconfig/network里的的主机名行,打印主机名

awk '/HOSTNAME/{print}' /etc/sysconfig/network

3.用-f 选项调用一个awk脚本来对sample.txt做操作,awk脚本是test.sh

awk -f test.sh sample.txt

4.输出a,b,c,$1 $2 $3 分别对应输出的a,b,c

echo a b c | awk'{print $1,$2,$3}'

5.读取输入的行并输出数据段个数

echo a b c | awk '{print $0}'

6.指定分隔符是” : “,输出passwd文本的第一列,即系统的用户名

awk -F ":" '{print $1}' /etc/passwd //写法1
awk 'BEGIN {FS=":"}{print $1}' /etc/passwd //写法2

7.awk中的变量,默认是空字串或者0

awk '/^$/ {x+=1} END {print x}' test //统计空白行行数并输出

8.awk结合条件语句使用,因为awk都使用了BEGIN模式,所以,在没读取test文档内容之前,就回把BEGIN后面的指令执行。

awk '{if($1<10) print "a"; else print "b"}' test  
//如果test文件中每一行的第一个参数小于10,则输出a,否则输出b

awk 'i=1 {} BEGIN{while(i<=10) {++i;print i}}'   
//i初始值为1,当i<=10,输出i的值,i++

awk 'BEGIN { do { ++x;print x } while (x<=10)}' 
 //do-while格式

awk 'BEGIN{for(i=1;i<=10;i++) print i}'   //for循环
2018-10-20 18:36:32 weixin_40099163 阅读数 1526
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19280 人正在学习 去看看 马永亮

在做多基因blast时,通常每个基因找到的匹配序列很多。这时习惯根据evalue来进行筛选,evalue较小的其相似性更高。下面提供两种方法解决。

一 linux命令

blast的-outfmt 6格式默认最上面的比对到的evalue最小,因此可以利用awk根据第一列去重,默认会保留最上面的一条记录,即evalue最小值。

awk '!a[$1]++{print}' 1.blast > uniq.blast

二 pandas

最近在看pandas,所以拿来练手。思路也是先排序,后去重。

import pandas as pd
#将blast(-outfmt 6)输出结果保存到DataFrame
inp = pd.read_table('E:\python_test\1.blast')
inp
query subject identity align_length mismatches gap_opens q_start q_end s_start s_end evalue bit_score
0 gene1 SQ183094348 100 147 0 0 1 147 378 232 3 272
1 gene1 SQ183119192 100 66 0 0 1 66 82 147 2 122
2 gene1 SQ182140986 100 157 0 0 1 157 88 244 1 291
3 gene2 SQ183094348 100 147 0 0 1 147 378 232 3 272
4 gene2 SQ183119192 100 66 0 0 1 66 82 147 2 122
5 gene2 SQ182140986 100 157 0 0 1 157 88 244 1 291
6 gene3 SQ183094348 100 147 0 0 1 147 378 232 9 272
7 gene3 SQ183119192 100 66 0 0 1 66 82 147 8 122
8 gene3 SQ182140986 100 157 0 0 1 157 88 244 7 291
#取出每个query对应的evalue最低的subject
inp.sort_values(by=['query','evalue']).drop_duplicates(subset='query')
query subject identity align_length mismatches gap_opens q_start q_end s_start s_end evalue bit_score
2 gene1 SQ182140986 100 157 0 0 1 157 88 244 1 291
5 gene2 SQ182140986 100 157 0 0 1 157 88 244 1 291
8 gene3 SQ182140986 100 157 0 0 1 157 88 244 7 291

有可能出现gene相同,evalue相同的情况,我觉得可以在加上bit_socre和align_length进行排序,这两列为降序排列。

没有更多推荐了,返回首页