您的位置:首页 > 运维架构 > Shell

shell的一些一句话东西

2015-01-04 16:32 357 查看

shell的一些一句话东西

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

time -p

[程序] 可以在运行结束之后打印出所需时间...其他用法可以man time

rpm -qa 查询redhat linux里面安装的所有软件...ubuntu下面可能不行,不过反正大型机下面又不是ubuntu.分页查看用 rpm -qa|more

然后如果想sort一下并且保存的话就 rpm -qa|sort >softwarelist.txt, 查看xxx软件装没装就用 rpm -qa |grep xxx

命令后面加上&即可在后台执行,,,,不妨拿gedit试试..

ssh -X 连接上远端服务器之后,就可以运行图形界面的程序了.

sudo su

是用root登陆!

文件切割 dd if=待切文件名

of=切后文件名 bs=多少字节作为切割单位 count=要切多少skip=切割起点

文件合并 dd if=待装文件名

of=装后文件名 bs=多少字节作为组装单位 count=要装多少skip=组装起点(从文件头开始)

解决令人发指的E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?的方法是 (确认没有有用的程序正在用lock之后)

sudo rm /var/lib/dpkg/lock

ps -aux

进程们的列表!

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}

shell的for 循环是这样的:



这里echo $X是要循环的部分($X前面的$表明其变量身份)。注意do和done 附近的换行。

【awk】想把两列交换怎么办?用awk '{print $2,$1}' filename吧,在管道操作里面可以 ...操作|awk '{print $2,$1}'

,多列操作同理,还可以这样计算两列之和什么的 操作|awk '{print $2+$1}'



获取一个软链接的指向,用readlink

shell里面想把什么东西的结果直接转化成变量,就直接把他们括起来在前面加$就行了 例如

$(readlink $XXX)

gzip -cd 直接把.gz拿来当普通文件用。。。在stdout上输出解压缩后的文件内容。。当然 .gz都是单文件压缩

默认的sh脚本是不支持alias的,如果想用脚本内的alias,需要在脚本前面加上shopt -s expand_aliases才行。至于脚本外的alias貌似没法用……

tee命令可以把输出打印到屏幕的同时输出成文件

if的单行指令为if [ XX = XX ] ;then XX;elif [ ! xx = xx ]; then XXX;else XXXX;fi

for的单行指令为 for X in DDD;do kkkkk${DIR##*/}k $X;done

输出文件名(去掉目录名) 用 basename file ,只输出路径名用dirname file 。如果是文件夹的话只输文件夹名字,用${DIR##*/}其中DIR是文件夹的全路径

将目录下所有文件名存到数组中,用($DIR/*)其中$DIR是目录,这种方式下标是从0开始的

提取数组元素,用${ARRAY[0]}。。。获取数组长度(即数组元素个数)用echo ${#a[@]},遍历数组元素(从1到最后),用for i in ${a[@]}

echo 里面,单引号表示既不替换$变量, 双引号替换$变量,echo -e 表示替换转义符(\n之类);echo 不加-e表示不替换转义符(\n等)

或者”可以用OR 表示二选一。例如ls /mydoc/*.txt OR *.jpg

cp -d

在拷贝软链接的时候,会保持拷过去的是链接,而非链接指向的文件。

`xxxx`表示``所夹函数的结果

cat list|while read aa;do mv `echo $aa|awk '{print $1".sam"}'` `echo $aa|awk '{print $2".sam"}'`;done 这个语句按照列表list,将所有带有第一列前缀的sam命名为 第二列前缀.sam

【PBS】批量删除任务,例如删除从1672597开始的9个任务:k=1672597;for i in `seq 1 9`;do qdel $k;let “k=$k+1";done

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}

想写个循环,包括1,2,3,4, 5,X,Y。咋办? for i in `seq 1 5` 'X' 'Y' ...........

打印文件绝对路径: echo ${PWD}/filename

sed -n '2,$p' filename打印文件除首行之后的行

输出第6列大于20000000的。。gawk '$6>200000000{print $0}' file1

从文件里一行一行的读,最好用while read i ;do XXXXXX $i;done<filename;

一次从文件里读两行,参见



将文件按第二列到第二列(-k2,2)的数值(-n)逆向(-r)排序sort -k2,2nr file

印文件第一行第二列的数据sed -n "1p" file| cut -f2

【awk】匹配,拽出满足第4列不为[ATCGatcg]之一,且忽略大小写,第3列不等于第4列的行awk 'BEGIN{IGNORECASE=1;}$4!~/[ATCGatcg]/&&$3!=$4' file

计算字符串$var的长度${#var},从字符串$var里面计算字符$char的个数$var|tr -cd $char| wc -c

算式的结果,例如计算4+3 就用 $[4+3]

浮点计算,用外部计算器bc。scale代表保留的有效数字位数。echo "scale=4;1/3"|bc得到.3333,bc -l是直接算

【awk】打印匹配XXX的下一行:awk '/XXX/{getline;print;}'

命名管道



ls *m8 |wc -w 好像这个能统计目录下面*.m8文件的个数。。

【VI】查找替换方法: % s/word1/word2/g 可以把全文的word1替换成word2

【awk】引用外面的变量咋办?可以用双引号套单引号的格式。var="test";awk 'BEGIN{print "'$var'"}。。PS:血的教训啊:如果引用的变量是数值,并且还是要用来比大小的,那么引用完一定要强制转换成数字啊,+0或者int或者把单引号写在双引号外面什么的都行 !例如 c=30;awk '($9> ("'$c'"+0))' T_20x.filtered.raw [b] 否则就和没过滤过一样![/b]





【awk】什么是BEGIN和END?BEGIN后面的{}里面装着循环起始前的内容,比如一些初始值。END后的{}装着循环结束后需要干的事情,例如打印XXX。而没有BEGIN和END的括号就是循环的时候对每行做的事情了。

【awk】 取消行末回车的办法:将print改成printf

【VI】改换外观方法:vi里面输入 :colorscheme 外观名

(可用tab进行自动补全)

touch 新建普通文件 mkfifo 新建命名管道文件

paste 纵向拼接两个文件,相当于cbind。paste -s 矩阵转置。

split 把一个大文件切成若干份。split -l 1000 file 把file切成若干份,每份1000行。

whereis xx 在系统文件夹中寻找xx(打印所有路径),which xx 在系统文件夹中寻找xx(打印第一个路径)。locate file查找普通文件file,非即时但很快。find [目录] -name xx 在目录中寻找名字含xx的文件。

想找第一个文件中间的哪些行在/不在第二个文件中出现了?用comm 和diff吧。。具体用法请help。PS:用之前要sort。。

kdesktop直接图形界面了……

【awk】分列符换行符怎么改?是什么??awk预定义RS(换行符),FS(读文件的分列符),ORS(输出时的换行符),OFS(输出时的分列符)变量分别为'\n'、'[ \t]+'、'\n'、' '。 awk 每一次输入文本时,NR(行数)变量自动加一,根据RS确定一次输入文本的内容将其赋给$0这一位置变量(是变量吆),再根据FS对其进行分域(也就是把各域的字符串分别赋给位置变量$1、$2、$3、... ;并且更新NR变量)



想改后缀,例如把*.txt都改成*.rar可以用 mv file ${file%.txt}.rar,一般#是去掉左边,%是去掉右边,一个符号是最小匹配,两个符号是最大匹配。更详细的看这里http://blog.163.com/cleave@126/blog/static/354763862010112183639209/

如果变量名称也是变量怎么办?中括号[]解决问题。ks=4;i='s';printf $[k$i] 结果返回4.

【awk】else if的写法:就是else if

sort -g可以针对科学计数法排序;sort针对第4列然后在逆向针对第3列进行排序怎么办?

sort -k4,4 -k3,3r逗号前面和后面表示排序参考块的起始和终止。r表示逆序,将r放在后面表示仅针对当前的块(也就是k3,3)逆序,而不是对所有。

shell里面也有sleep,而且还是更加精锐的sleep,例如

sleep 1 睡眠1秒,sleep 1s 睡眠1秒,sleep 1m 睡眠1分,sleep 1h 睡眠1小时

【awk】拆分字符串:split($3,arr,",");将$3拆分,分隔符是逗号,,然后分割好的东西写到数组arr里面

【awk】数组循环遍历:可以for (i in arr){print

arr[i]}

【awk】只针对某一列匹配awk '$3~/aaa/', 只针对某一段替换,awk '{gsub("-","",$2);}' file,但注意有时候可能会有分隔符错误,所以有必要在BEGIN里加上BEGIN{FS=“\t”;OFS="\t"}之类的

【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

fc-list查看linux下安装了哪些字体


cal 9 1752

查看1752年9月的日历

【cat】把一大坨文件例如1.txt,2.txt....n.txt按照顺序cat到一起怎么办?无需艰难决定!for i in `seq 1 n`; do cat $i.txt >> output;done

【awk】如果需要匹配某个东西,并且该东西是变量的话,变量外面可以不用加//的。。。

【vim】对块进行缩进的方法:选中块 ,然后输入>

【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内容替换后不改变。

【awk】index函数返回子字符串第一次被匹配的位置,偏移量从位置1开始。格式如下:index(string, substring)

【awk】match函数返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量RSTART为字符串中子字符串的开始位置,RLENGTH为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串。函数格式如下:match( string, regular expression )

判断文件为空的方法 对于文件i,若[ -s $i ]为真,则文件不为空。输出当前目录下所有空文件的方法:for i in * ;do if [ ! -s $i ] ;then echo $i;fi;done

【grep】匹配“A或B”的方法:grep -E 'A|B'

在空格隔开的字符串两端加括号()可以将其转换为数组。因此可以用这种方式将【awk】中的数组传递到外面来。str=`awk 'BEGIN{OFS=" "}(NR==1){for(i=3;i<=NF;i++){print $i}}' statmiRNAinfo.xls`;k=($str);echo ${k[2]}

在管道中,可以用/dev/stdin 来指代通过管道传过来的数据,如

less a.txt |cat b.txt /dev/stdin
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: