我有一个带有in的file1和一个包含文件夹中所有文件全名的file2。
file1的Ids看起来像P001A,P001I,P002A,P002I .file2文件的名称本身包含这些in。我想要创建一个新的file3,其中包含来自file2的所有全名,其中有来自file1的ids。
File2有大约100 k行,而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这里怎么了?你知道那个剧本是不是应该是那样的还是我应该用别的方法。
发布于 2020-11-19 19:16:01
我用这个脚本解决了我的问题
1#!/bin/bash
2 for i in $(cat file1);
3 do
4 FILENAME=$(find /directory/ -regextype posix-egrep -regex ".*/20170001${i}[0-9]*\.wav")
5 echo "${FILENAME}";
6 done > file3我甚至不需要有文件名的文件。
发布于 2020-11-19 14:23:32
正如@Benjamin所说-你使用/bin/sh,但使用"[“和"]”来测试。我重写了您的代码以使用/bin/sh:
#!/bin/sh
is_substring(){
case "$2" in
*$1*) return 0;;
*) return 1;;
esac
}
FILE1="$1"
FILE2="$2"
while read -r value1
do
while read -r value2
do
if is_substring "$value1" "$value2"
then
echo $value2
fi
done <${FILE2}
done <${FILE1} > file3.list为巴什:
#!/bin/bash
FILE1="$1"
FILE2="$2"
(while read -r value1
do
(while read -r value2
do
if [[ -z "${value2##*$value1*}" ]]
then
echo $value2
fi
done) < ${FILE2}
done <${FILE1}) > file3.listhttps://stackoverflow.com/questions/64913426
复制相似问题