shell
6子
这个作者很懒,什么都没留下…
展开
-
将文件按照行数以及顺序拆分成多个文件
awk -vf=3 -vl="`wc -l file`" 'BEGIN{p=int(l/f);q=(l%f);for(n=1;na[i])i++;print >"file"i}' file这里的-vf=3 表示将file拆分成3个文件,另外还有一种解法,如下所示:#!/bin/bashif [ $# -ne 2 ];then echo "U: sh $0原创 2013-09-08 16:12:37 · 1587 阅读 · 0 评论 -
日志打印到屏幕同时保存到文件及获取管道返回状态
参考:http://w.gdu.me/wiki/shell/pipe.htmlhttp://bbs.chinaunix.net/thread-4113329-1-1.htmlhttp://wiki.klniu.com/wiki/Bash/%E4%BB%8EShell%E8%84%9A%E6%9C%AC%E5%86%85%E9%83%A8%E5%B0%86%E6%89%80%E6转载 2013-11-28 20:22:13 · 1182 阅读 · 0 评论 -
shell: ip合法性检查
ipcalc -cs x.x.x.x && echo 'IP Right' || echo 'IP Error' 其中 x.x.x.x 指IPv4地址,多么神奇的命令呐 ipcalc: ip address expectedUsage: ipcalc [OPTION...] -c, --check Validate IP address for specified a原创 2013-11-28 15:35:51 · 2701 阅读 · 0 评论 -
shell:求某个数以内的所有完全数
#!/bin/bashfor ((i=1;$[(2**i-1)*(2**(i-1))]<=$1;i++))do num=$(factor $i $[2**i-1]|awk 'NF==2'|wc -l) if [ "$num" -eq 2 ] then echo $[(2**i-1)*(2**(i-1))]原创 2013-12-02 11:54:03 · 1573 阅读 · 0 评论 -
awk 自增行累加值
另外一个关于数字运算的问题,想这样求和:第一行直接输出,弟2行和弟3行数值相加,4,5, 6行相加;7,8,9,10再相加,后面则为11,12,3,14,15相加。总的说,以递增行数的形式相加,这里我列出了简单的1-10,结果直接显示和就行。12345678910输出151534即可,谢谢大家。我的方法:awk 'fu原创 2013-12-12 21:31:52 · 5135 阅读 · 0 评论 -
将文本转换成json格式
#!/bin/bashformat(){ usedifs="$IFS" IFS=$'\n';[ $# -eq 0 ] && { echo "not files need format." ;exit 1; } for((i=1;i<=$#;i++));do files=(${files[@]} ${!i});done log1()原创 2013-12-13 17:07:35 · 8786 阅读 · 0 评论 -
awk 处理文本:行转列,列转行
[root@centos ~]# cat f1 2 3 4 51 2 3 4 51 2 3 4 51 2 3 4 51 2 3 4 5[root@centos ~]# awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(j=1;j<=NF;j++)for(k=1;k<=NR;k++)printf k==NR?a[k,j] RS:a[k,j] FS}'原创 2013-10-25 11:38:04 · 29324 阅读 · 2 评论 -
nginx https 双向认证证书创建与配置
脚本一键完成, 最后会提示输入一个客户端密码原创 2014-11-27 15:28:02 · 2450 阅读 · 0 评论 -
两个文件file1 file2, file1按递增顺序, 不小心将空格去掉了, 需还原
题目:r=$((100*$RANDOM/32767));paste -d '\t' file1 ; sed 's/\t//g' file1 > file2file1 共两列, 第一列是按等差进行排序的, 第二列是随机排序的, 现在不小心将file1中的空白都删掉了, 变得只有一列了, 如file2, 现在需要将file1进行还原.[root@localhost ~]# [root原创 2015-01-05 19:17:27 · 1037 阅读 · 0 评论 -
shuf 命令: 随机排序文件
有时候我们需要将文本的顺序打乱,也就是随机排序,我以前的做法是写个shell,利用内置bash 里的内置变量 $RANDOM 进行排序,然后打印。代码如下:while read line;do echo $RANDOM $line; done 这里取了个巧而已。虽然也能实现需求,但是如果遇到大文件,本身 shell 的效率是很低的。偶然得知系统本身有一个命令是专职干这事儿的,那就是 s原创 2013-11-01 14:53:48 · 21410 阅读 · 0 评论 -
awk 取绝对值最大
[root@centos6-1 ~]# cat infile aaa -1aaa -2aaa -3aaa 28aaa -22bbb -2bbb -4bbb -6ccc -2ccc -3ccc -8ccc -10ddd -2ddd -4ddd -12[root@centos6-1 ~]# [root@centos6-1 ~]# [ro原创 2013-11-20 11:25:53 · 7183 阅读 · 0 评论 -
shell 排列组合
#!/bin/bashfor ((i=1;i<=$#;i++))do eval echo $(echo $@|awk -vOFS=, -vn=$i '{$1=$1;for(i=1;i<=n;i++)printf "{"$0"}"}')|xargs -n1done执行结果如下:[root@centos test]# sh test.sh 1 2 3 12311原创 2013-09-08 16:44:22 · 3969 阅读 · 0 评论 -
按数据的区间进行处理
file数据内容如下所示:A 0 0.00521A 1 0.0111A 2 0.0173A 3 0.0281A 4 0.0423A 5 0.0606A 6 0.0938A 7 0.128A 8 0.159A 9 0.174A 10 0.183A 11 0.19A 12 0.2A 13 0.21转载 2013-09-11 22:45:38 · 1136 阅读 · 0 评论 -
Shell中的IFS解惑
一、IFS 介绍 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符。完整定义是The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the转载 2013-09-13 00:43:40 · 957 阅读 · 0 评论 -
awk 实现前面两个数累加为第三个数如0 1 1 2 3 5 8 13……
1. 结果为:0123581321345589144代码:awk 'BEGIN{s=0;m=100;while(1){print s=s+n;n=s-n;if(!s)++s;if(s>m)exit}}'2. 结果为:01123581321345589代码:awk 'BEGIN{s=0;m=100;w原创 2013-09-12 20:36:03 · 1631 阅读 · 0 评论 -
awk 的性能测试
需求简单描述如下:a文件内容:a a a 12a b b 10a c c 8a c f 5b文件内容:a a a 10a b b 8a c d 3处理后的内容,即前面三列相同的,第四列进行累加,得到如下:a a a 22a b b 18a c c 8a c f 5a c d 3PS:每个文件都是1000W行以上,代码如下:awk '{n=$NF;NF--原创 2013-09-12 12:06:49 · 2221 阅读 · 0 评论 -
关于 1+2+3+4+...+98+99+100 的shell问题
貌似很多公司面试都喜欢问下这个问题,下面总结下这个shell的解法:seq 100 |echo $[ $(tr '\n' '+') 0]echo $[$(echo +{1..100})]seq 100 | awk '{sum+=$0}END{print sum}'echo {1..100} | sed 's/\s/\+/g' | bcawk 'BEGIN{for(i原创 2013-10-23 10:20:39 · 1987 阅读 · 0 评论 -
read 命令详解
语法:read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...] One line is read from the standard input, or from the file descriptor fd supplied as an ar原创 2013-10-29 17:31:11 · 1645 阅读 · 0 评论 -
终于知道保存SCP日志了
诸如 scp 这样的命令,打印在屏幕上的东西没法直接通过重定向来保存,因为它的输出并不是标准输出,那我要搞保存 scp 的日志怎么办呢?终于学到了一个不错的方法!利用 script 命令。如下所示:script -q /dev/stdout -c 'scp remotehost:path path' > /tmp/scp.log参考:http://bbs.chinaunix.原创 2013-11-01 12:21:33 · 14942 阅读 · 1 评论 -
Shell中的>/dev/null 2>&1 与 2>&1 >/dev/null 与&>/dev/null 的区别
默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2 。那么我们来看看下面的几种重定向方法的区别:>/dev/null 2>&1// 实际上,应该等同于这样: 1>/dev/null 2>/dev/null ,默认情况下就是1,标准输出,所以一般都省略。 而&符号,后面接的是必须的文件原创 2013-09-12 11:34:43 · 66756 阅读 · 6 评论