Bash:如何从数组中提取最长的目录路径?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash:如何从数组中提取最长的目录路径?相关的知识,希望对你有一定的参考价值。

我将find命令的输出放入数组中,如下所示:

pathList=($(find /foo/bar/ -type d))

如果数组包含多个等长的最长路径,如何提取在数组中找到的最长路径?:

echo ${pathList[@]}
/foo/bar/raw/
/foo/bar/raw/2020/
/foo/bar/raw/2020/02/
/foo/bar/logs/
/foo/bar/logs/2020/
/foo/bar/logs/2020/02/

提取后,我想将/foo/bar/raw/2020/02//foo/bar/logs/2020/02/分配给另一个数组。

谢谢

答案

您能不能尝试以下内容。这应该打印最长的数组(可以是多个,最大长度相同),您可以将其分配给以后的数组。

echo "${pathList[@]}" |
awk -F'/' '{max=max>NF?max:NF;a[NF]=(a[NF]?a[NF] ORS:"")$0} END{print a[max]}'


我刚刚使用您提供的值创建了一个测试数组,并对其进行了如下测试:

arr1=($(printf '%s
' "${pathList[@]}" |
awk -F'/' '{max=max>NF?max:NF;a[NF]=(a[NF]?a[NF] ORS:"")$0} END{print a[max]}'))

当我看到新数组的内容时,它们如下:

echo  "${arr1[@]}"
/foo/bar/raw/2020/02/
/foo/bar/logs/2020/02/

awk代码的说明:添加awk代码的详细说明。

awk -F'/' '                        ##Starting awk program from here and setting field separator as / for all lines.
{
  max=max>NF?max:NF                ##Creating variable max and its checking condition if max is greater than NF then let it be same else  set its value to current NF value.
  a[NF]=(a[NF]?a[NF] ORS:"")$0     ##Creating an array a with index of value of NF and keep appending its value with new line to it.
}
END{                               ##Starting END section of this program.
  print a[max]                     ##Printing value of array a with index of variable max.
}'

以上是关于Bash:如何从数组中提取最长的目录路径?的主要内容,如果未能解决你的问题,请参考以下文章

BASH - 如何从 CSV 文件中的列中提取数据并将其放入数组中?

使用'basename -s'从bash中的路径中提取文件名

如何从 Bash 中的路径字符串中删除文件后缀和路径部分?

使用 bash,如何从目录中的所有文件中创建类路径?

在一个无序整数数组中,找出连续增长片段最长的一段, 增长步长是1。Example: [3,2,4,5,6,1,9], 最长的是[4,5,6]

从单个按钮从多个片段中提取数据