python - Linux中如何将一行数据复制到接下来N行的最后一列?

标签 python linux bash shell awk

请参阅下面的数据示例。我希望将纬度和经度添加到以下行的末尾,直到到达下一个纬度和经度,然后执行相同的操作。这些纬度和经度值将在文件中发生变化。

当前数据

2010 02 15 19 29 2   0  LATITUDE:  37.19  LONGITUDE: 90.27  
2010 02 15 19 29 2   1  1316.1 304  18.2  -9.5  -6.6    
2010 02 15 19 29 2   2  1300.1 202   2.2   1.3  -1.2    
2010 02 15 19 29 2   3  1284.1 188   5.2   1.4  -0.4        
2010 02 15 19 49 2   0  LATITUDE:  37.19  LONGITUDE: 90.27   
2010 02 15 19 49 2   1  1316.1 277   9.5  -8.7  -8.4    
2010 02 15 19 49 2   2  1300.1 101   1.0  -1.4  -0.3    
2010 02 15 19 49 2   3  1284.1 195   2.8  -2.0   0.9    
2010 02 15 20 14 2   0  LATITUDE:  37.21  LONGITUDE: 90.27  
2010 02 15 20 14 2   1  1316.6 285   7.0  -1.2  -6.7    
2010 02 15 20 14 2   2  1300.6  46   2.8   2.1  -1.5    
2010 02 15 20 14 2   3  1284.6 194   6.2  -1.8  -0.4 

所需数据

2010 02 15 19 29 2   0  LATITUDE:  37.19  LONGITUDE: 90.27  
2010 02 15 19 29 2   1  1316.1 304  18.2  -9.5  -6.6 LATITUDE:  37.19  LONGITUDE: 90.27    
2010 02 15 19 29 2   2  1300.1 202   2.2   1.3  -1.2 LATITUDE:  37.19  LONGITUDE: 90.27    
2010 02 15 19 29 2   3  1284.1 188   5.2   1.4  -0.4 LATITUDE:  37.19  LONGITUDE: 90.27        
2010 02 15 19 49 2   0  LATITUDE:  37.19  LONGITUDE: 90.27   
2010 02 15 19 49 2   1  1316.1 277   9.5  -8.7  -8.4 LATITUDE:  37.19  LONGITUDE: 90.27    
2010 02 15 19 49 2   2  1300.1 101   1.0  -1.4  -0.3 LATITUDE:  37.19  LONGITUDE: 90.27    
2010 02 15 19 49 2   3  1284.1 195   2.8  -2.0   0.9 LATITUDE:  37.19  LONGITUDE: 90.27    
2010 02 15 20 14 2   0  LATITUDE:  37.21  LONGITUDE: 90.27  
2010 02 15 20 14 2   1  1316.6 285   7.0  -1.2  -6.7 LATITUDE:  37.21  LONGITUDE: 90.27    
2010 02 15 20 14 2   2  1300.6  46   2.8   2.1  -1.5 LATITUDE:  37.21  LONGITUDE: 90.27    
2010 02 15 20 14 2   3  1284.6 194   6.2  -1.8  -0.4 LATITUDE:  37.21  LONGITUDE: 90.27    

最佳答案

使用awk:

awk '/LATITUDE/{v=""; for(i=8; i<=NF; i++)v=v" "$i; print; next} {print $0, v}' File

每当遇到模式LATITUDE时,将行的一部分(从LATITUDE到行尾)复制到变量v。对于包含 LATITUDE 的行,按原样打印该行,对于其他行,打印该行,然后打印之前保存的变量 v

输出

AMD$ awk '/LATITUDE/{v=""; for(i=8; i<=NF; i++)v=v" "$i; print; next} {print $0, v}' File


2010 02 15 19 29 2   0  LATITUDE:  37.19  LONGITUDE: 90.27
2010 02 15 19 29 2   1  1316.1 304  18.2  -9.5  -6.6      LATITUDE: 37.19 LONGITUDE: 90.27
2010 02 15 19 29 2   2  1300.1 202   2.2   1.3  -1.2      LATITUDE: 37.19 LONGITUDE: 90.27
2010 02 15 19 29 2   3  1284.1 188   5.2   1.4  -0.4          LATITUDE: 37.19 LONGITUDE: 90.27
2010 02 15 19 49 2   0  LATITUDE:  37.19  LONGITUDE: 90.27
2010 02 15 19 49 2   1  1316.1 277   9.5  -8.7  -8.4      LATITUDE: 37.19 LONGITUDE: 90.27
2010 02 15 19 49 2   2  1300.1 101   1.0  -1.4  -0.3      LATITUDE: 37.19 LONGITUDE: 90.27
2010 02 15 19 49 2   3  1284.1 195   2.8  -2.0   0.9      LATITUDE: 37.19 LONGITUDE: 90.27
2010 02 15 20 14 2   0  LATITUDE:  37.21  LONGITUDE: 90.27
2010 02 15 20 14 2   1  1316.6 285   7.0  -1.2  -6.7      LATITUDE: 37.21 LONGITUDE: 90.27
2010 02 15 20 14 2   2  1300.6  46   2.8   2.1  -1.5      LATITUDE: 37.21 LONGITUDE: 90.27
2010 02 15 20 14 2   3  1284.6 194   6.2  -1.8  -0.4   LATITUDE: 37.21 LONGITUDE: 90.27

关于python - Linux中如何将一行数据复制到接下来N行的最后一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33777080/

相关文章:

python - 从具有相同名称但文件类型不同的其他文件中查找一个没有扩展名的文件

c - 如何使用linux c计算bash中光标前的字母?

python - Cython 浮点除法 PyExc_ZeroDivision 错误检查

Python NetworkX 边缘列表超出范围

python - 在 Linux 中获取进程的最大 CPU/RAM 使用率

linux - 运行包含 ansible 命令的 shell 脚本时权限被拒绝 - 公钥

Python 正则表达式添加到 url 的链接

python - 使用 BeautifulSoup 抓取 OSHA 网站

php - 安装mod_headers并重新启动apache后出错

c - 无法以读取模式打开消息队列 (mq_open())