首页 > 解决方案 > 使用 awk/sed/grep 将字符串分解为两个数组

问题描述

从包含不同文件详细信息的文本文件中的内容在 shell/bash 脚本中创建两个不同的数组。如何使用 awk/sed/grep 将目录提取到一个数组中并将文件名提取到另一个数组中?

我有一个如下所示的文本文件

    2017-02-04      07:18   /temp/folder1/filename_20170204_something.txt  
    2017-03-04      07:18   /temp/folder2/filename_20170204_20170304.txt  
    2017-04-04      07:18   /temp/folder3/filename_20170404_.txt    
directories_list= {folder1,folder2,folder3}  
file_list = {filename_20170204.txt,filename_20170304.txt,filename_20170404.txt}

标签: bashshellawksedgrep

解决方案


您想如何处理数组中的重复条目?是否有任何特定的顺序要保存文件。

如果不是,您可以使用以下命令,(删除重复条目并根据文件名排序

folders=()
files=()

folders=`awk '{print $NF}' <INPUT_FILE> | awk -F'/' '{print $(NF-1)}' | sort -nr | uniq`
files=`awk '{print $NF}' <INPUT_FILE> | awk -F'/' '{print $NF}' | sort -nr | uniq`

下面是 awk 命令的解释,

awk '{print $NF}' <INPUT_FILE> -> takes the last field in the input file
awk -F'/' '{print $(NF-1)}' -> cuts the last filed with / as delimiter and takes the penultimate column

希望这可以帮助 !


推荐阅读