提取.txt文件特定字段的Bash脚本需求:唯一stop_id及坐标
提取CSV文件中唯一stop_id及对应坐标的Bash脚本(附新手友好解释)
需求说明
你有一个约4000条记录的CSV格式.txt文件,首行为表头,需要提取所有唯一的stop_id,并输出对应的坐标(格式如(21.261225, -157.818181))。下面是针对Bash新手的脚本和详细语法解释:
完整脚本
假设你的文件名为stops.txt,执行以下命令即可:
tail -n +2 stops.txt | awk -F ',' '{print $1 "," $5 "," $6}' | sort -u | awk -F ',' '{print $1 ": (" $2 ", " $3 ")"}'
逐命令详细解释
这是一条管道串联的命令,每个步骤负责一部分工作:
tail -n +2 stops.txt
作用:跳过文件的首行表头,从第二行开始输出所有数据行。
语法解释:tail:用于查看文件末尾内容的基础命令;-n +2:指定从第2行开始显示后续所有行,直接过滤掉不需要的表头行。
awk -F ',' '{print $1 "," $5 "," $6}'
作用:以逗号为分隔符,提取每行的stop_id(第1列)、stop_lat(第5列)、stop_lon(第6列)三个字段。
语法解释:awk:处理结构化文本的强大工具,擅长按列提取内容;-F ',':指定CSV文件的分隔符为逗号;{print $1 "," $5 "," $6}:输出第1、5、6列,列之间用逗号分隔,把我们需要的核心字段单独筛选出来。
sort -u
作用:对提取后的内容排序,并自动去除重复的stop_id记录。
语法解释:sort:对文本行进行排序;-u:全称--unique,排序后自动删除重复的行,确保每个stop_id只保留一条对应坐标的记录。
awk -F ',' '{print $1 ": (" $2 ", " $3 ")"}'
作用:把提取的字段格式化成符合要求的样式。
语法解释:
再次使用awk,以逗号为分隔符,将第1列(stop_id)、第2列(纬度)、第3列(经度)拼接成stop_id: (纬度, 经度)的格式,满足坐标的展示需求。
注意事项
如果你的文件名不是stops.txt,直接将命令中的文件名替换为实际文件名即可。
内容的提问来源于stack exchange,提问作者akshaka9
相关产品推荐
相关产品推荐

