强大的awk

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内的字符串频度的统计,并且对出现的频度从高到低进行了排序。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值