awk:只保留与reg.exp对应的字段的一部分

时间:2016-03-19 09:38:08

标签: regex awk

我有一个文本文件,每行对应一个数据库记录,并使用awk在其上做各种事情。所有这些都很有效,除了一点:在一个领域,我希望只保留相关数据;这对应于正则表达式。下面给出数据的一个例子,我希望只保留像123.75这样的部分(它们是航空通信的频率;如果有人想知道)。第二行和第三行是所有行的输出应该是什么样的。我怎样才能在awk中丢弃一个字段中不需要的部分(在这种情况下为3美元)?

50.728901147531914, 2.2349750264486374,Auto-info 123.5
50.33727106924861, 2.9927873611450195,123.500
53.2102778,07.9886111,123.500
53.4197222,07.9044444,123.500 Waterkant Start
53.4813889,07.6516667,123.500; Wittmund TWR 118.725
51.8219444,06.2744444,123.350; 123.150; 123.500
51.4291667,07.6436111,123.500
50.9972222,07.3775000,129.950; 123.500; 123.150
52.9566667,07.5569444,123.500 Steinberg Info
51.3027778,07.9791667,123.500
51.4733333,07.6450000,123.450; 123.500

1 个答案:

答案 0 :(得分:1)

使用awk你可以这样做:

awk -F'[;,][[:blank:]]*' -v OFS=, '{
   gsub(/^[^[:digit:]]*|[^[:digit:]]*$/, "", $3)
}
NF>3 {
   gsub(/^[^[:digit:]]*|[^[:digit:]]*$/, "", $4)
} 1' file

50.728901147531914,2.2349750264486374,123.5
50.33727106924861,2.9927873611450195,123.500
53.2102778,07.9886111,123.500
53.4197222,07.9044444,123.500
53.4813889,07.6516667,123.500,118.725
51.8219444,06.2744444,123.350,123.150,123.500
51.4291667,07.6436111,123.500
50.9972222,07.3775000,129.950,123.500,123.150
52.9566667,07.5569444,123.500
51.3027778,07.9791667,123.500
51.4733333,07.6450000,123.450,123.500