awk 处理数据挺方便的,整理下使用方法。
先看下最简单的用法
下面是数据,文件名pic.csv
10371029 130657404 33250828600
10375462 0 32754488348
10401830 130670653 33301943326
10490532 130818323 33390650001,33390638503
10492736 130808000 33392915994,33392923278,33392951671,33392965894
10501933 130847315 33426734671,33426784141,33426741368
10520323 130871605 33474622551
10561441 130900744 33569740772
10563686 130931058 33572560455,33572597666,33572625609
10594334 130933942 33595945445,33595930712
10609164 130968431 33625612546
10623734 130960850 33655945376
10625513 130985226 33659411835,33659434639
10662700 131036062 33748007817
10688362 131050019 33802663455
10744503 131143877 33909572401,33909557630
10749313 131138769 33912184752
10777611 131181015 33975768553
10790647 131192937 34013919173,34013904105,34013909379
10790833 131198786 34014605153,34014654005,34014895558,34014920756
10799709 131213531 34039005481
10805941 131221289 34048620033,34048637653
10806145 131228025 34049593438,34049617769,34049618566,34049596717
10837378 131259345 34138112374,34138156606
10847268 131293940 34163393641,34163387864
只看前两列
awk '{print $1,$2}' pic.csv
数据过滤,只看第一列数字为10847268
awk ' $1==10847268' pic.csv
内建变量
说到了内建变量,我们可以来看看awk的一些内建变量:
$0 当前记录(这个变量中存放着整个行的内容)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格或Tab
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS 输入的记录分隔符, 默认为换行符
OFS 输出字段分隔符, 默认也是空格
ORS 输出的记录分隔符,默认为换行符
FILENAME 当前输入文件的名字
awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd
root 0 /root
bin 1 /bin
daemon 2 /sbin
adm 3 /var/adm
lp 4 /var/spool/lpd
sync 5 /sbin
如果把文件第一列用逗号分隔,可以用
awk 'ORS="," {print $1}' pic.csv