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

如何在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

我有一个带有几个字段的文件(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 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
s
split
,获取第一个和第五个字段,并发布示例文件。带有不想要的结果的测试效率不高,并且会导致大量的后续问题。感谢您提供有关拆分选项的提示。要将它分成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”。我想在我理解这里使用的正则表达式之前我不会明白为什么。