我有一个包含多个子文件夹的目录,所有子文件夹都包含多个文本文件,这些文本文件的格式如下。
data01:data02
我需要提取之后的 data02:
并将其导出到根目录中的单个文件中。我已完成提取,但如何在多个目录和文件上运行它?
答案1
您可以使用“find”和“awk”自定义以下命令行
find FOLDERLIST -type f -iname "PATTERN" \
-exec awk -F":" 'NF>1 {print $2}' "{}" \; > /PATH/TO/RESULTFILE
在哪里
- FOLDERLIST 是您要递归搜索的顶级文件夹的空格分隔列表,其中“当前文件夹”将是一个点: find 。 - 类型 f ...
- “-type f”仅用于搜索文件
- PATTERN 是您感兴趣的文件的常见模式,例如星号“*”将查找所有文件,“*.csv”将查找 CSV 文件,...
- /PATH/TO/RESULTFILE 是根目录中结果文件的名称
- “awk”部分在“:”处分割所有找到的文件并跳过空结果
编辑:按照 Steeldriver 的建议,将空结果检查调整为 NF>1。
答案2
您尚未提供输出文件的格式,因此我假设您希望第二个字段位于单独的行中。您可以使用(假设所有文件的格式a:b
如您在问题中所述):
find directory -type f \
-exec awk -F: '{print $2}' "{}" >> /output.txt \;
它将在directory
其子目录中查找文件,并执行 command awk -F: '{print $2}' "{}" >> /output.txt
,该命令会将 后的值写入:
file /output.txt
。