几个shell技巧
作者:王宏江
 

几年前回答chinaunix上别人的一些问题时的帖子,这几年没再用shell都快忘光了,翻出来复习一下。

    1,如何先读取一个文件(文件内容为数字序列)中的最后一个数字并把该数加一后又追加到原文件中?
cat file | xargs | awk ‘{print $0,$NF+1}’| xargs -n1 > newfile && mv -f newfile file

    2,使文件中前2列和后3列完全一样的行只保留1行(任取一行保留)
文件a:
aa b test asfa??fff dd
test2
test3
aa b test4 hjks fff dd
aa b test5 hjks fff dd

变成
aa b test asfa??fff dd
test2
test3

cat file | sort | awk ‘!($1$2 in a){a[$1$2];print}’

    3,shell求1到100和的问题
seq 1 100 | awk ‘{sum+=$0}END{print sum}’


    4,awk匹配范围时可以条件选择

awk ‘/start1/||/start2/,/end/’ file


    5,我想往每个文件夹里复制同一个文件有什么好方法吗?

find dir -type d -mindepth 1 | xargs -i echo “cp a” {} | sh


    6,我如何在一个文件固定的行后,加入一个新行?

sed -i ‘50iThis is new hang!’ file? (sed版本: gnu sed 4.0.3)


    7,

984.70
2994001

746.80
2384709

1013.30
3100664
…………….


    上面是我的文件,我想把它分成两个文件,带小数点的数放到一个文件中,另它下面的数放到另一个文件中,生成的文件也是这样按列放置数据,并且不要有空行。

cat a | awk ‘NF>0{if($0~/\./) print $0 | “tee file1″;else print $0 | “tee file2″}’

公司网站:www.chundi.com 产品技术支持网站:www.mailer.com.cn  产品商务渠道网站:www.turbomail.cn
Copyright 1997-2017 北京春笛信息技术有限公司 地址:北京海淀区知春路23号863软件园量子银座九层