SED:将多行的选择字段组合成一行

时间:2012-06-20 08:43:00

标签: bash scripting sed awk

我有以下形式的文件:

random stuff  
more random stuff, etc  
more random stuff, etc   
05201206 field1 field2 field3 field4 field5  
05201212 field1 field2 field3 field4 field5  
05201218 field1 field2 field3 field4 field5  

其中字段是lats and lons

我想要做的是找到所有以“05”开头的行并从每个字段中取出字段1,3,然后按照找到的顺序将结果打印到一行中,例如:(尝试写入KML代码)

field1, field3, 0 field1, field3, 0 field1, field3, 0  field1, field3, 0

另外,相关的问题 - 可以在sed中完成数学吗?理想情况下,在打印结果之前,应将每个拉伸和离子除以10.0。

2 个答案:

答案 0 :(得分:1)

你不能在sed中做数学。 awk是用于令牌化和处理字段的正确工具。

awk '/^05/{ $4/=10.0;$2/=10.0;out=out$2","$4","}END{print out }' inputFile

答案 1 :(得分:0)

awk显然是适合这项工作的工具,但您当然可以使用sed来完成部分任务。过滤器是一个强大的想法:

<input sed -n /^05/p                    | # print only lines starting "05" 
  awk '{print 0, $2/10", " $4/10", "}'  | # print scaled columns 2 and 4
  sed '1s/^0 //'                        | # Remove leading "0 "
  tr -d '\n'                            ; # Remove all newlines
  echo " 0"                             # append trailing "0" and newline

请注意,这里的seds完全是多余的(第一个肯定会被第一个awk上的模式匹配所取代);关键是你可以通过构建简单的工具来完成每项任务并将它们全部一起运行,从而轻松地建立你想要的那种处理。