首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Bash中提取具有特定字符长度的多个字段?

问如何在Bash中提取具有特定字符长度的多个字段?
EN

Stack Overflow用户
提问于 2018-12-23 20:36:29
回答 1查看 57关注 0票数 1

我有一个有几个字段的文件(test.csv),我想要的是标题和路径,标题有10个字符,并从路径中删除一些级别。所做的工作是使用awk命令选择两个字段:

代码语言:javascript
复制
$ awk -F "," '{print substr($4, 1, 10)","$6}' test.csv [1]

路径中需要删除的三个级别并不总是相同的。它可以是/article/17/1/或者这个/open-organization/17/1,所以我不能在$6字段中使用substr。

下面是我得到的结果:

代码语言:javascript
复制
Title,Path
Be the ope,/article/17/1/be-open-source-supply-chain
Developing,/open-organization/17/1/developing-open-leaders

想要的结果是:

代码语言:javascript
复制
Title,Path
Be the ope,be-open-source-supply-chain
Developing,developing-open-leaders

标题可以使用10个字符,但我仍然需要删除路径中的3个级别。

我可以使用cut命令:

代码语言:javascript
复制
cut -d'/' -f5- to remove the "/.../17/1/"

但不确定如何将其通过管道传输到%1

我尝试使用for循环逐个获取标题和路径,但我很难让awk命令一次运行一行。

我已经在这上面花了几个小时了,但没有任何运气。任何帮助都将不胜感激。

用于测试的虚拟数据:

test.csv

发布日期、内容类型、作者、标题、评论计数、路径、标签、字数

2017年1月31日,文章,Scott Nesbitt,书评:Our to Hack and Own,0,OpenStack图书,660 2017年1月31日,文章,Jason Baker,5个使用/article/17/1/review-book-ours-to-hack-and-own,的新指南,2/文章/17/1/OpenStack-tutorials,"OpenStack,How-tos and tutorials",419

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-23 21:04:50

您可以使用regex替换该字符串。

代码语言:javascript
复制
stringZ="Be the ope,/article/17/1/be-open-source-supply-chain"

sed -E "s/((\\/\\w+){3}\\/)//" <<< $stringZ

请注意,如果要将文件作为输入提供给sed,则需要使用-i

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53903667

复制
相关文章

相似问题

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