我有一个包含几个字段的文件(test.csv),我想要的是标题和带有10个字符的路径,并从路径中删除了几个级别。完成的工作是使用awk命令选择两个字段:
$ awk -F "," '{print substr($4, 1, 10)","$6}' test.csv [1]
路径中需要删除的三个级别并不总是相同的。它可以是/article/17/1/
或此/open-organization/17/1
,所以我不能对字段$ 6使用substr。
这是我得到的结果:
Title,Path
Be the ope,/article/17/1/be-open-source-supply-chain
Developing,/open-organization/17/1/developing-open-leaders
想要的结果是:
Title,Path
Be the ope,be-open-source-supply-chain
Developing,developing-open-leaders
标题可以包含10个字符,但是我仍然需要从路径上删除3个级别。
我可以使用cut命令:
cut -d'/' -f5- to remove the "/.../17/1/"
但不确定如何将其传送到[1]
我尝试使用for循环逐个获取标题和路径,但是我很难让awk命令一次运行一行。
我花了数小时没有运气。任何帮助,将不胜感激。
用于测试的虚拟数据:
发布日期,内容类型,作者,标题,评论数,路径,标签,字数
2017年1月31日,文章,斯科特·内斯比特(Scott Nesbitt),书评:《我们要黑客并拥有》,0,/ article / 17/1 / review-book-ours-to-hack-and-own,书籍,660 2017年1月31日,Article,Jason Baker,使用OpenStack的5条新指南,2,/ article / 17/1 / openstack-tutorials,“ OpenStack,操作方法和教程”,419
答案 0 :(得分:2)
您可以使用正则表达式替换字符串。
stringZ="Be the ope,/article/17/1/be-open-source-supply-chain"
sed -E "s/((\\/\\w+){3}\\/)//" <<< $stringZ
请注意,如果要将文件作为sed的输入,则需要使用-i