首页 > 代码库 > shell的一些一句话东西

shell的一些一句话东西

shell的一些一句话东西  

2010-09-10 11:22:58|  分类: linux shell |  标签:shell  linux  |举报|字号 订阅

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

shell的一些一句话东西