小编Ins*_*ico的帖子

从包含数百万个文件的目录(bash/python/perl)中通过精确匹配有效地查找数千个文件

我在 Linux 上,我试图从包含数百万个文件的目录 (SOURCE_DIR) 中查找数千个文件。我有一个需要查找的文件名列表,存储在单个文本文件 (FILE_LIST) 中。该文件的每一行都包含一个与 SOURCE_DIR 中的文件相对应的名称,并且该文件中有数千行。

## FILE_LIST contain single word file names, each per line
#Name0001
#Name0002
#..
#Name9999
Run Code Online (Sandbox Code Playgroud)

我想将文件复制到另一个目录 (DESTINATION_DIR)。我写了下面的循环,里面有循环,一一查找。

#!/bin/bash
FILE_LIST='file.list'
## FILE_LIST contain single word file names, each per line
#Name0001
#Name0002
#..
#Name9999

SOURCE_DIR='/path/to/source/files' # Contain millions of files in sub-directories
DESTINATION_DIR='/path/to/destination/files' # Files will be copied to here


while read FILE_NAME
do
    echo $FILE_NAME
    for FILE_NAME_WITH_PATH in `find SOURCE_DIR -maxdepth 3 -name "$FILE_NAME*" -type f -exec readlink -f {} \;`; 
    do …
Run Code Online (Sandbox Code Playgroud)

python bash perl find

4
推荐指数
1
解决办法
330
查看次数

如何在 100 个文本文件(每个文件有 50k 行)上的 20k 术语的“搜索和替换”中执行最少的磁盘 I/O

我想做一个 \xe2\x80\x98 搜索并用非结构化文本替换大约 100 个数据文件上的 \xe2\x80\x99 。每个文件大小约为 50 MB,行数为 50k。大约有20k个术语需要搜索和替换,它们存储在另一个文件中;\'terms_list.csv\',一个包含三列 COL1、COL2 和 COL3 的 CSV 格式文件。我需要在 100 个数据文件中的每个数据文件的 \'terms_list.csv\' 的 COL1 和 COL2 中搜索单词,如果找到其中一个单词,则替换为 COL3 中的相应单词。

\n\n

凭借我对 shell 脚本编写的基本知识,我使用 AWK/SED 循环编写了以下 shell 脚本。它从 20k 行 \xe2\x80\x98terms_list.csv\xe2\x80\x99 中逐行读取,并在 100 个文件中的每个文件中搜索 COL1 和 COL2,如果找到,将替换为 COL3。

\n\n
for DATA_FILE in $(ls text_data_file_*.csv) #Data files (100 files) with 50k lines; contain terms in COL1 and COL2 of terms_list.csv\ndo\n   while read -r line;  \n       do\n           x=$(echo $line | awk -F\',\' \'{print $1}\'); \\\n           y=$(echo …
Run Code Online (Sandbox Code Playgroud)

perl sed

3
推荐指数
1
解决办法
122
查看次数

标签 统计

perl ×2

bash ×1

find ×1

python ×1

sed ×1