强大的awk
2016-06-05 22:17
232 查看
1. 实现对文件的转置,具体看Leetcode的194题
#!/bin/bash awk '{ for(i=1;i<=NF;i++){ A[FNR, i]=$i } } END{ for(i=1;i<=NF;i++){ for(j=1;j<=FNR;j++){ printf A[j,i]" " } print "" } }' file.txt
2. 合并两个文件
假如我有两个文件a.txt和b.txt。其中a.txt的内容为:1 x xx
2 y yy
3 z zz
b.txt的内容为:
1 a
3 b
我想要实现的结果是如下:
1 x xx a
2 y yy
3 z zz b
即以a.txt中的第一列元素为基准,如果b.txt也存在a.txt中的第一列元素,则将b.txt中该行剩余的元素跟到a.txt中的行后,即增加一列。如果没有的话,直接将a.txt中的行打出。
$ awk 'BEGIN{FS=OFS=" "} NR==FNR{A[$1]=$2} NR>FNR{print $0, A[$1]}' b.txt a.txt 1 x xx a 2 y yy 3 z zz b
另一种方式为使用awk的ARGIND参数来搞定:
$ awk 'ARGIND==1{A[$1]=$2} ARGIND>1{print $0, A[$1]}' b.txt a.txt 1 x xx a 2 y yy 3 z zz b
3. 实现一个简单的字符统计功能
awk '{for(i=1;i<NF;i++)A[$i]++} END{for(i in A) print i, A[i]}' a.txt | sort -rnk2
以上一行脚本实现了对文本a.txt内的字符串频度的统计,并且对出现的频度从高到低进行了排序。
相关文章推荐
- 操作系统处理机调度及常见的调度算法
- 把字符串中的数字找出来并按照升序排序
- 贪吃蛇的java代码分析(三)
- leetcode-Reverse Linked List-206
- 学习MVC操作oracle时报错java.lang.AbstractMethodError
- python格式化输出
- 清理缓存
- task_struct结构体(PCB)描述
- C++实验7-特殊三位数
- 第二次团队冲刺--10
- 大话设计模式-第06章 穿什么有这么重要?--装饰模式
- 机器学习笔记-聚类算法K-means和FCM的学习小结
- c++第七次实验
- HTML中的表单元素
- 学习进度条--第十四周
- The Definitive Antlr 4 第8章学习笔记
- Java基础语法学习——面向对象基础
- android常用的控件ViewPager的使用
- spring-AOP编程出现org.springframework.beans.factory.BeanCreationException
- jvmti