主编语
数据量越来越大,你的电脑是不是经常卡死?一个Excel表格光打开就要花个几分钟,还要排序,查找合并??!!我的天,求上帝拯救我于数据的海洋,求赐予我无穷大的内存~ 主编告诉你,不用上帝拯救,你也能高效处理数据量大的表格数据~ linux命令学起来!!! 一听linux,好多读者脸都要吓绿了,那不是程序猿才能掌握的吗,我这么貌美如花,怎能学的会这个?其实就几个单词的事,聪明如你,不妨一试。 今天ActionFree邀请了linux大神&awk 专家伊移已奕 跟大家分享linux系统处理表格数据的常用命令~
温馨提示:技能的掌握需要孰能生巧,练习很重要哦~
大家如果用过Linux系统处理数据的话,往往都会惊叹于Linux系统高效的运行方式。然而,由于不熟悉Linux命令,很多人仍然会选择Excel来处理表格数据。Excel友好的界面固然能让数据更加整齐地展示出来,但是当数据较大(比如大于500M)时,很多PC往往就吃不消了。这个时候,使用Linux系统处理数据就显得尤为重要。本文将展示在处理表格数据时常用的一些命令。
取前面若干行:head命令
举例:取file1文件的前两行
代码:head -2 file1 > res
取后面若干行:tail命令
代码:tail -2 file1 > res
tail -n +3 file1 > res
取中间若干行:tail 和 head命令配合
代码:tail -n +2 file1 | head -2 > res
head -3 file1 | tail -2 > res
按行合并文件:cat命令
代码:cat file1 file2 > res
按列合并文件:paste命令
代码:paste file1 file2 > res
取若干列:cut命令
代码:cut -f3,4,5 file1 > res
cut -f3-5 file1 > res
cut -f3- file1 > res
合并多个文件中的某些列:paste命令
代码:paste res
awk常用
取对角线上的数:
代码:awk "{print $NR}" file1 > res
取对角线上的数:
代码:awk "BEGIN{ORS="\t"}{print $NR}" file1 > res
每两行变一行:
代码:awk "ORS=NR%2?"\t":"\n"" file1 > res
行列转置:
代码:awk "{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(i=1;i<=NF;i++){for(j=1;j<=NR;j++)printf a[j,i]"\t";printf "\n"}}" file1 > res
从file2中取file1中存在的内容:
代码:awk "NR==FNR{a[$0]=1}NR>FNR&&($1 in a){print}" file1 file2
从file2中取file1中不存在的内容:
代码:awk "NR==FNR{a[$0]=1}NR>FNR&&!($1 in a){print}" file1 file2
取两个文件中内容相同的行:
代码:awk "NR==FNR{a[$0]=1}NR>FNR&&($0 in a){print}" file1 file2
取两个文件中内容和行号均相同的行:
代码:awk "NR==FNR{a[NR]=$0}NR>FNR&&(a[FNR]==$0){print}" file1 file2
文件内容去冗余:
代码:awk "!a[$0]++" file1
小贴士
awk的功能可以实现很多需要编程的任务,实验狗学起来,可以应对几乎所有能遇到的数据问题,再也不用低三下四去求生信的同学给我写一段代码干这干那了。生信汪学起来,一行代码解决所有的需要整理数据的问题,高效还省空间。
总之,收藏起来,等有需要的时候来查阅就对啦!
大部分代码均可直接使用,应用到你的文件,只需要修改下文件名,有问题也可以留言哦
关注ActionFree喜欢请点赞哦
作者:伊移已奕