首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查file1行是否部分包含在file2的一行中

检查file1行是否部分包含在file2的一行中
EN

Stack Overflow用户
提问于 2020-11-19 14:10:13
回答 2查看 130关注 0票数 0

我有一个带有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}:模糊重定向

代码语言:javascript
复制
  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

这里怎么了?你知道那个剧本是不是应该是那样的还是我应该用别的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-19 19:16:01

我用这个脚本解决了我的问题

代码语言:javascript
复制
  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

我甚至不需要有文件名的文件。

票数 0
EN

Stack Overflow用户

发布于 2020-11-19 14:23:32

正如@Benjamin所说-你使用/bin/sh,但使用"[“和"]”来测试。我重写了您的代码以使用/bin/sh:

代码语言:javascript
复制
#!/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

为巴什:

代码语言:javascript
复制
#!/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.list
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64913426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档