shell的一些杂七杂八的东西

  1. time -p [程序] 可以在运行结束之后打印出所需时间...其他用法可以man time
  2. rpm -qa  查询redhat linux里面安装的所有软件...ubuntu下面可能不行,不过反正大型机下面又不是ubuntu.分页查看用rpm -qa|more  然后如果想sort一下并且保存的话就 rpm -qa|sort >softwarelist.txt, 查看xxx软件装没装就用 rpm -qa|grep xxx
  3. 命令后面加上&即可在后台执行,,,,不妨拿gedit试试..
  4. ssh -X  连接上远端服务器之后,就可以运行图形界面的程序了.
  5. sudo su 是用root登陆!
  6. 文件切割 dd if=待切文件名 of=切后文件名 bs=多少字节作为切割单位 count=要切多少 skip=切割起点 
  7. 文件合并 dd if=待装文件名 of=装后文件名 bs=多少字节作为组装单位 count=要装多少 skip=组装起点(从文件头开始)
  8. 解决令人发指的E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?的方法是 (确认没有有用的程序正在用lock之后) sudo rm /var/lib/dpkg/lock
  9. ps -aux  进程们的列表!
  10. cut可以提取第n列,或者第n个字节,cut -f1 取第一列,cut -b1,2,5取第1,2,5个字节 cut -c3-7 取第3-7个字符,cut -c2-可以提取第二个到最后的字符。后面加上文件名字即可。提取字符串m中的后n个字符串,可用echo ${m: -n},从n开始到k的字符串,用echo ${m: n:k},第k个字符之前的字符串,echo ${m: :k},如果想提取从头到倒数第n个字符(不包括倒数第n个),用echo ${m: :${#m}-n}
  11. shell的for 循环是这样的:
     
    这里echo $X是要循环的部分($X前面的$表明其变量身份)。注意do和done 附近的换行。
  12. 【awk】想把两列交换怎么办?用awk '{print $2,$1}' filename吧,在管道操作里面可以 ...操作|awk '{print $2,$1}' ,多列操作同理,还可以这样计算两列之和什么的 操作|awk '{print $2+$1}' 。
  13. 获取一个软链接的指向,用readlink
  14. shell里面想把什么东西的结果直接转化成变量,就直接把他们括起来在前面加$就行了 例如 $(readlink $XXX)
  15. gzip -cd 直接把.gz拿来当普通文件用。。。在stdout上输出解压缩后的文件内容。。当然 .gz都是单文件压缩
  16. 默认的sh脚本是不支持alias的,如果想用脚本内的alias,需要在脚本前面加上shopt -s expand_aliases才行。至于脚本外的alias貌似没法用……
  17. tee命令可以把输出打印到屏幕的同时输出成文件
  18. if的单行指令为if [ XX = XX ] ;then XX;elif [ ! xx = xx ]; then XXX;else XXXX;fi  
  19. for的单行指令为 for X in DDD;do kkkkk${DIR##*/}k $X;done
  20. 输出文件名(去掉目录名) 用 basename file ,只输出路径名用dirname  file 。如果是文件夹的话只输文件夹名字,用${DIR##*/}其中DIR是文件夹的全路径
  21. 将目录下所有文件名存到数组中,用($DIR/*)其中$DIR是目录,这种方式下标是从0开始的
  22. 提取数组元素,用${ARRAY[0]}。。。获取数组长度(即数组元素个数)用echo ${#a[@]},遍历数组元素(从1到最后),用for i in ${a[@]}
  23. echo 里面,单引号表示既不替换$变量, 双引号替换$变量,echo  -e 表示替换转义符(\n之类);echo 不加-e表示不替换转义符(\n等)
  24. 或者”可以用OR 表示二选一。例如ls /mydoc/*.txt OR *.jpg
  25. cp -d 在拷贝软链接的时候,会保持拷过去的是链接,而非链接指向的文件。
  26. `xxxx`表示``所夹函数的结果
  27. cat list|while read aa;do mv `echo $aa|awk '{print $1".sam"}'` `echo $aa|awk '{print $2".sam"}'`;done 这个语句按照列表list,将所有带有第一列前缀的sam命名为 第二列前缀.sam
  28. 【PBS】批量删除任务,例如删除从1672597开始的9个任务:k=1672597;for i in `seq 1 9`;do qdel $k;let “k=$k+1";done
  29. bash中得到数列的方法:seq .例如seq 1 5得到1 2 3 4 5,而更简单的办法是{1..5}或者{a..z},和perl里面差不多。。例如for i in {1..5};do;done。然后如果想写chr1 chr2 chr3....chr10,则可chr{1..10}
  30. 想写个循环,包括1,2,3,4, 5,X,Y。咋办? for i in `seq 1 5` 'X' 'Y' ...........
  31. 打印文件绝对路径: echo ${PWD}/filename 
  32. sed -n '2,$p' filename打印文件除首行之后的行
  33. 输出第6列大于20000000的。。gawk '$6>200000000{print $0}' file1
  34. 从文件里一行一行的读,最好用while read i ;do XXXXXX $i;done<filename; 一次从文件里读两行,参见
     
  35. 将文件按第二列到第二列(-k2,2)的数值(-n)逆向(-r)排序sort -k2,2nr file
  36. 印文件第一行第二列的数据sed -n "1p" file| cut -f2
  37. 【awk】匹配,拽出满足第4列不为[ATCGatcg]之一,且忽略大小写,第3列不等于第4列的行awk 'BEGIN{IGNORECASE=1;}$4!~/[ATCGatcg]/&&$3!=$4' file
  38. 计算字符串$var的长度${#var},从字符串$var里面计算字符$char的个数$var|tr -cd $char| wc -c
  39. 算式的结果,例如计算4+3 就用 $[4+3]
  40. 浮点计算,用外部计算器bc。scale代表保留的有效数字位数。echo "scale=4;1/3"|bc得到.3333,bc -l是直接算
  41. 【awk】打印匹配XXX的下一行:awk '/XXX/{getline;print;}'
  42. 命名管道
  43. ls *m8 |wc -w 好像这个能统计目录下面*.m8文件的个数。。
  44. 【VI】查找替换方法:  % s/word1/word2/g 可以把全文的word1替换成word2
  45. 【awk】引用外面的变量咋办?可以用双引号套单引号的格式。var="test";awk 'BEGIN{print "'$var'"}。。PS:血的教训啊:如果引用的变量是数值,并且还是要用来比大小的,那么引用完一定要强制转换成数字啊,+0或者int或者把单引号写在双引号外面什么的都行 !例如 c=30;awk '($9> ("'$c'"+0))' T_20x.filtered.raw   否则就和没过滤过一样!shell的一些杂七杂八的东西_第1张图片 
  46. 【awk】什么是BEGIN和END?BEGIN后面的{}里面装着循环起始前的内容,比如一些初始值。END后的{}装着循环结束后需要干的事情,例如打印XXX。而没有BEGIN和END的括号就是循环的时候对每行做的事情了。
  47. 【awk】 取消行末回车的办法:将print改成printf
  48. 【VI】改换外观方法:vi里面输入 :colorscheme 外观名(可用tab进行自动补全)
  49. touch 新建普通文件 mkfifo 新建命名管道文件
  50. paste 纵向拼接两个文件,相当于cbind。paste -s 矩阵转置。
  51. split 把一个大文件切成若干份。split -l 1000 file 把file切成若干份,每份1000行。
  52. whereis xx 在系统文件夹中寻找xx(打印所有路径),which xx 在系统文件夹中寻找xx(打印第一个路径)。locate file查找普通文件file,非即时但很快。find [目录] -name xx 在目录中寻找名字含xx的文件。
  53. 想找第一个文件中间的哪些行在/不在第二个文件中出现了?用comm 和diff吧。。具体用法请help。PS:用之前要sort。。
  54. kdesktop直接图形界面了……
  55. 【awk】分列符换行符怎么改?是什么??awk预定义RS(换行符),FS(读文件的分列符),ORS(输出时的换行符),OFS(输出时的分列符)变量分别为'\n'、'[ \t]+'、'\n'、' '。 awk 每一次输入文本时,NR(行数)变量自动加一,根据RS确定一次输入文本的内容将其赋给$0这一位置变量(是变量吆),再根据FS对其进行分域(也就是把各域的字符串分别赋给位置变量$1、$2、$3、... ;并且更新NR变量)shell的一些杂七杂八的东西_第2张图片 
  56.  想改后缀,例如把*.txt都改成*.rar可以用 mv file ${file%.txt}.rar,一般#是去掉左边,%是去掉右边,一个符号是最小匹配,两个符号是最大匹配。更详细的看这里http://blog.163.com/cleave@126/blog/static/354763862010112183639209/
  57.  如果变量名称也是变量怎么办?中括号[]解决问题。ks=4;i='s';printf $[k$i] 结果返回4.
  58. 【awk】else if的写法:就是else if
  59. sort -g可以针对科学计数法排序;sort针对第4列然后在逆向针对第3列进行排序怎么办? sort  -k4,4 -k3,3r逗号前面和后面表示排序参考块的起始和终止。r表示逆序,将r放在后面表示仅针对当前的块(也就是k3,3)逆序,而不是对所有。
  60. shell里面也有sleep,而且还是更加精锐的sleep,例如 sleep 1    睡眠1秒,sleep 1s    睡眠1秒,sleep 1m   睡眠1分,sleep 1h   睡眠1小时
  61. 【awk】拆分字符串:split($3,arr,",");将$3拆分,分隔符是逗号,,然后分割好的东西写到数组arr里面
  62. 【awk】数组循环遍历:可以for (i in arr){print arr[i]
  63. 【awk】只针对某一列匹配awk '$3~/aaa/', 只针对某一段替换,awk '{gsub("-","",$2);}' file,但注意有时候可能会有分隔符错误,所以有必要在BEGIN里加上BEGIN{FS=“\t”;OFS="\t"}之类的
  64. 【awk】对多个文件进行操作除了用FNR(当前文件到了第几行)和NR(总共到了第几行)之外,还可以用ARGIND==X(注意,要gawk)过滤读到了第几个文件,X为1就是第一个文件。例如处理4个文件的: gawk 'BEGIN{FS="\t";OFS="\t"}(ARGIND==1){if(r!=$1&&NF>12){out[$1]=$12"\t"$13;tonmr[$1]=substr($7,4)}}(ARGIND==2&&NF>2){funcc[$1]=$2"\t"$3}(ARGIND==3&&FNR>1&&NF>13){ks=$4    ;for(i=5;i<=14;i++){ks=ks"\t"$i};exprr[$1]=ks}(ARGIND==4&&NF>2){splus="'$s'_"$3;if(out[splus]!=""&&funcc[$3]!=""&&exprr[tonmr[splus]]!=""){print $1"\t'$i'\t"tonmr[splus]"\t"    exprr[tonmr[splus]]"\t"$3"\t"out[splus]"\t"funcc[$3];next} }' $ortorigin $symbolslist $expfile $genelist>$nu.temp1
  65. fc-list查看linux下安装了哪些字体
  66. cal 9 1752 查看1752年9月的日历
  67. 【cat】把一大坨文件例如1.txt,2.txt....n.txt按照顺序cat到一起怎么办?无需艰难决定!for i in `seq 1 n`; do cat $i.txt >> output;done
  68. 【awk】如果需要匹配某个东西,并且该东西是变量的话,变量外面可以不用加//的。。。
  69. 【vim】对块进行缩进的方法:选中块 ,然后输入>
  70. 【awk】sub gsub gensub区别
    sub(a,b[,c]) 替换第一次匹配,匹配正则a,用b替换,c为指定替换目标是哪个域如$1,$2,若无c指$0,返回值为替换成功次数
    gsub(a,b[,c]) 全局替换,匹配正则a,用b替换,c为指定替换目标是哪个域如$1,$2,若无c指$0,返回值为替换成功次数
    gensub(a,b,c[,d])全局替换,匹配正则a,用b替换,c为指定替换目标是第几次匹配,d为指定替换目标是哪个域如$1,$2,若无d 指$0,返回值为target替换后内容(未替换还是返回target原内容),与sub、gsub不同的是,target内容替换后不改变。
  71. 【awk】index函数返回子字符串第一次被匹配的位置,偏移量从位置1开始。格式如下:index(string, substring)
  72. 【awk】match函数返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量RSTART为字符串中子字符串的开始位置,RLENGTH为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串。函数格式如下:match( string, regular expression )
  73. 判断文件为空的方法 对于文件i,若[ -s $i ]为真,则文件不为空。输出当前目录下所有空文件的方法:for i in * ;do if [ ! -s $i ] ;then echo $i;fi;done 
  74. 【grep】匹配“A或B”的方法:grep -E 'A|B' 
  75. 在空格隔开的字符串两端加括号()可以将其转换为数组。因此可以用这种方式将【awk】中的数组传递到外面来。str=`awk 'BEGIN{OFS=" "}(NR==1){for(i=3;i<=NF;i++){print $i}}' statmiRNAinfo.xls`;k=($str);echo ${k[2]}
  76. 在管道中,可以用/dev/stdin 来指代通过管道传过来的数据,如less a.txt |cat b.txt /dev/stdin

你可能感兴趣的:(shell)