首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析文件时使用awk提取第一行,然后只使用特殊字符进行解析。

解析文件时使用awk提取第一行,然后只使用特殊字符进行解析。
EN

Stack Overflow用户
提问于 2017-06-09 10:51:10
回答 2查看 59关注 0票数 0

我设置了(900)具有结构的文件:

代码语言:javascript
复制
XYZ-7, ABC987654321

Some text
[...] 
Another Text

1) 8 [...] coordinates: 54°38,177’N, 13°33,573’E; 54°38,094’N, 13°33,237’E
2) 5 [...] coordinates: 54°39, 377’ N, 13°33,940’E, 54°39,242’N, 13°33,632’E
...
23) 2 [...] coordinates: 53°40,207’N, 14°32,522’E; 53°40,207’N, 14°32,557’E

[...] 
Some other text

我想用awk从他们那里提取数据。输出应该如下所示:

代码语言:javascript
复制
XYZ-7, ABC987654321
1) 8 54°38,177’N, 13°33,573’E; 54°38,094’N, 13°33,237’E
2) 5 54°39, 377’ N, 13°33,940’E, 54°39,242’N, 13°33,632’E
...
23) 2 53°40,207’N, 14°32,522’E; 53°40,207’N, 14°32,557’E

我已经找到了如何分别获得第一行awk 'NR==1 {print $0};'和坐标awk '/^[0-9]{1,2}\)/ {print $1 " " $2 " " $5 " " $6 " " $7 " " $8};'的行,但是我不知道如何在一个命令中加入它们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-09 11:14:24

迭代一组文件的awk解决方案:

代码语言:javascript
复制
for f in *; do 
    awk -v fn="result.txt" 'NR==1{ print >> fn }/coordinates:/{ print $1,$2,$5,$6,$7,$8 >> fn }' "$f"; 
done

生成的文件result.txt内容如下所示:

代码语言:javascript
复制
...
XYZ-7, ABC987654321
1) 8 54°38,177’N, 13°33,573’E; 54°38,094’N, 13°33,237’E
2) 5 54°39, 377’ N, 13°33,940’E,
23) 2 53°40,207’N, 14°32,522’E; 53°40,207’N, 14°32,557’E
...
票数 1
EN

Stack Overflow用户

发布于 2017-06-09 11:06:29

你可以试试这个awk

代码语言:javascript
复制
awk 'NR==1{print} {s=$0;n=gsub("^.*coordinates:","",s)} n{print $1,$2,s}' file

测试:

代码语言:javascript
复制
$ awk 'NR==1{print} {s=$0;n=gsub("^.*coordinates:","",s)} n{print $1,$2,s}' file
XYZ-7, ABC987654321
1) 8  54°38,177’N, 13°33,573’E; 54°38,094’N, 13°33,237’E
2) 5  54°39, 377’ N, 13°33,940’E, 54°39,242’N, 13°33,632’E
23) 2  53°40,207’N, 14°32,522’E; 53°40,207’N, 14°32,557’E
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44455902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档