在Unix中基于文本过滤记录

时间:2018-11-02 10:41:44

标签: shell unix awk sed

我正在尝试从该文件中提取与第十个字段中的文本“ IN”匹配的所有记录。

我尝试过,但没有给我准确的结果。在此提供的任何帮助将不胜感激。

awk '$10 == "IN" {print $0}'

input_file:我的输入文件

A1|A2|A3|A4|A5|A6|A7|A8|A9|PK|A11|A13|A14|A15|A16|A17|A18
1|2|3|4|5|6|7|8|9|IN|11|12|13|14|15|16|17|18
AW|BW|CQ|AA|AR|AF|RR|AKL|ASD|US|PP|BN|TY|OL|Q3|M8|I7|V6
AR|BR|CR|A8|AN|AQ|RU|A11|A13|IN|P9P|B0N|T2Y|O4L|Q43|M88|I71|V16

output_file:我的输出应该是

1|2|3|4|5|6|7|8|9|IN|11|12|13|14|15|16|17|18
AR|BR|CR|A8|AN|AQ|RU|A11|A13|IN|P9P|B0N|T2Y|O4L|Q43|M88|I71|V16

第10个字段中与“ IN”匹配的所有记录均应过滤。

1 个答案:

答案 0 :(得分:2)

由于您没有在awk代码中提到字段分隔符,因此默认情况下它将空格作为字段分隔符,并且您的Input_file是|管道分隔的,所以让awk知道您应该设置它以代码形式显示。

请您尝试以下。

awk -F'|' '$10=="IN"'  Input_file

说明: 也为上述代码添加了说明。

awk -F'|' '         ##Setting field separator as |(pipe) for all lines of Input_file.
$10=="IN"           ##Checking condition if 10th field is equal to IN here if yes then print the current line.
'  Input_file       ##Mentioning Input_file name here.