我有以下形式的文件:
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。
答案 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上的模式匹配所取代);关键是你可以通过构建简单的工具来完成每项任务并将它们全部一起运行,从而轻松地建立你想要的那种处理。