【发布时间】:2020-11-19 14:10:13
【问题描述】:
我有一个带有 id 的 file1 和一个 file2,它是一个包含文件夹中所有文件全名的列表。
来自 file1 的 ID 看起来像这样 P001A、P001I、P002A、P002I ... 并且来自 file2 的文件的名称本身就包含这些 id。我想创建一个新的 file3,其中包含来自 file2 的所有全名,这些全名具有来自 file1 的 id。
File2 大约有 100k 行,而 file1 有 89 行,因此 file2 中有许多行包含与 file1 中的行相同的 id。
这是我正在使用的脚本,但它说
FILE1:未找到命令 FILE2:未找到命令 -bash: ${FILE1}: 不明确的重定向
1#!/bin/sh
2 FILE1 ="$1"
3 FILE2 ="$2"
4 while read -r value1
5 do
6 while read -r value2
7 do
8 if [[ "$value1" == *"$value2"* ]]
9 then
10 echo $value2
11 fi
12 done <${FILE2}
13 done <${FILE1} > file3.list
这里有什么问题?你知道那个脚本应该是这样还是我应该做一些其他的方式。
【问题讨论】:
-
看看shellcheck.net,它会告诉你很多常见的错误。马上开始:你使用
/bin/sh,然后你使用[[ ... ]],一个Bashism;切换到case进行模式匹配,或使用/bin/bash(或/usr/bin/env bash)。然后,您对FILE1和FILE2的分配不得在=周围包含空格。最后,这会非常慢,你可以用grep -Ff "$FILE2" -- "$FILE1"做同样的事情。 -
您能否添加一些从两个文件中提取的示例以及预期的输出。
-
@BenjaminW。什么使 -Ff 选项? @ Raman Sailopal file2 例如文件从 P001A0001 到 P001A0120,而在 file1 中只有 P001A,我想将所有包含 P001A id 的文件存储在第三个文件中。
-
@PetarYakov:请从两个相关文件中添加示例数据
标签: bash file iteration contains