awk
6子
这个作者很懒,什么都没留下…
展开
-
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 · 4013 阅读 · 0 评论 -
awk 中 利用shell命令和管道 捕捉返回内容
命令:awk 'NR==1{print;next}{cmd="date -d "$NF " +%s";cmd |getline d;a[d]=$0}END{t=asorti(a,b);for(n=t;n>0;n--)print a[b[n]]}' FILE参考:http://bbs.chinaunix.net/thread-4115342-1-1.html原创 2013-12-13 15:11:07 · 2942 阅读 · 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 · 8833 阅读 · 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 · 5165 阅读 · 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 · 7234 阅读 · 0 评论 -
awk 的怪异现象以及其解决之道:正则表达式范围与语言环境的悲伤故事
[seesea@UC ~]$ echo abcABC | awk '{print IGNORECASE ":" gensub(/([[:lower:]])/, "x", "g");}' 0:xxxABC[seesea@UC ~]$ echo abcABC | awk '{print IGNORECASE ":" gensub(/([a-z])/, "x", "g");}'原创 2013-10-30 18:37:45 · 897 阅读 · 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 · 2007 阅读 · 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 · 1650 阅读 · 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 · 2250 阅读 · 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 · 1162 阅读 · 0 评论 -
将文件按照行数以及顺序拆分成多个文件
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 · 1604 阅读 · 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 · 29363 阅读 · 2 评论