如何在Bash中提取具有特定字符长度的多个字段?
我有一个带有几个字段的文件(test.csv),我想要的是标题和路径,标题为10个字符,并从路径中删除一些级别。我们所做的是使用awk命令选择两个字段:如何在Bash中提取具有特定字符长度的多个字段?,bash,Bash,我有一个带有几个字段的文件(test.csv),我想要的是标题和路径,标题为10个字符,并从路径中删除一些级别。我们所做的是使用awk命令选择两个字段: $ awk -F "," '{print substr($4, 1, 10)","$6}' test.csv [1] 路径中需要删除的三个级别并不总是相同的。它可以是/article/17/1/或此/open organization/17/1,因此我不能将substr用于字段$6 以下是我得到的结果: Title,Path Be the o
$ awk -F "," '{print substr($4, 1, 10)","$6}' test.csv [1]
路径中需要删除的三个级别并不总是相同的。它可以是/article/17/1/
或此/open organization/17/1
,因此我不能将substr用于字段$6
以下是我得到的结果:
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命令一次运行一行
我花了好几个小时在这上面,运气不好。任何帮助都将不胜感激
用于测试的虚拟数据:
test.csv
发布日期、内容类型、作者、标题、评论数、路径、标记、字数
2017年1月31日,文章,Scott Nesbitt,书评:我们的黑客和拥有,0,/Article/17/1/书评我们的黑客和拥有,书籍,660
2017年1月31日,文章,Jason Baker,5个使用OpenStack的新指南,2,/Article/17/1/OpenStack教程,“OpenStack,操作指南和教程”,419您可以使用正则表达式替换字符串
stringZ="Be the ope,/article/17/1/be-open-source-supply-chain"
sed -E "s/((\\/\\w+){3}\\/)//" <<< $stringZ
stringZ=“成为运营商,/article/17/1/Be开源供应链”
sed-E“s/(\\/\\w+{3}\\\/)/”使用awk
ssplit
,获取第一个和第五个字段,并发布示例文件。带有不想要的结果的测试效率不高,并且会导致大量的后续问题。感谢您提供有关拆分选项的提示。要将它分成5部分,我需要设置2个分隔符。使用awk{split($0,a,“,|/”);print a[1];print a[5]}进行管道传输还不起作用。这很好。我可以通过管道将其传输到awk命令,它可以正常工作!在此之前,我也尝试过Kamil的想法,尽管我在运行此命令后丢失了标题文本路径:“awk-F”、“{print substr($4,1,10)”、“$6}”test.csv | awk-F”、|/“{print$1”、“$6}”。谢谢大家!!我刚刚注意到sed删除了类似于“/article/17/1/”的级别,而不是这个“/open organization/17/1”。我想在我理解这里使用的正则表达式之前我不会明白为什么。