shell - 提取特定字段

提取特定字段

  • awk
    • 在shell命令行输入命令调用awk
    • awk脚本

测试数据:
数据格式:tab键分割,前三条记录5个字段,最后一条记录4个字段
要求:抽取字段数为5的记录的第二个和第三个字段,并且字段之间仍是以tab分割
踩坑:awk格式化输出中,系统变量OFS:输出域分隔符,默认是空格键,不是我们想要的tab键

解决:重新指定输出域分隔符
修改前:awk 'BEGIN {FS="\t"} {if(NF==5) print NR,$2,$3 }' test.txt 
修改后:awk 'BEGIN {FS="\t";OFS="\t"} {if(NF==5) print NR,$2,$3 }' test.txt  
2019-03-11 21:05:07	209.58.131.47	57103	122.192.12.71	22270
2019-03-11 21:05:07	209.58.131.48	57104	122.192.12.71	22270
2019-03-11 21:05:07	209.58.131.49	57105	122.192.12.71	22270
2019-03-11 21:05:07	209.58.131.50	57106	122.192.12.71	

awk

在shell命令行输入命令调用awk

awk系统变量:
FILENAME:当前文件名
FS:字段分隔符,默认是空格键
NR:当前记录数
NF:当前记录中的域数量

[hadoop@slave107 suiji]$ awk 'BEGIN {FS="\t";OFS="\t"} {if(NF==5) print NR,$2,$3 }' test.txt
1 209.58.131.47 57103
2 209.58.131.48 57104
3 209.58.131.49 57105

awk脚本

#!/bin/awk -f
BEGIN{FS="\t";OFS="\t"}
{if(NF==5) print NR,$2,$3}
END{print FILENAME}

[hadoop@slave107 suiji]$ ./extract_fields test.txt
1 209.58.131.47 57103
2 209.58.131.48 57104
3 209.58.131.49 57105
test.txt

你可能感兴趣的:(linux)