【问题标题】:I want to remove everything contained in one list from another list along with the next line from another file我想从另一个列表中删除一个列表中包含的所有内容以及另一个文件中的下一行
【发布时间】:2017-12-11 14:47:39
【问题描述】:

我想从另一个列表中删除一个列表中包含的所有内容以及下一行。例如: list2.txt 包含:

A
D

list1a.txt 包含:

>A
 AAAAA
>B
 GGGGG
>C
 CCCC
>D
 TTTT

我希望得到以下输出:

>B
GGGGG
>C
CCCC

其中 >A 和 >D 以及它们下面的行已被删除。

我试过了:

input=$1
file_to_edit=$2
while IFS= read -r var
do
echo $var
sed "s/$var//g" $file_to_edit >f2.txt
done < "$input"

f2.txt 返回:

>A
AAAAA
>B
GGGGG
>C
CCCC
>
TTTT

正如预期的那样,它返回删除的“D”,而不是 A,而不是它们下面的行。 我需要删除第一个列表中包含的任何行 第二个文件,以及它下面的行。

【问题讨论】:

    标签: bash awk sed grep


    【解决方案1】:

    GNU sed

    $ sed 's|.*|/^>&$/,+1d|' f1
    /^>A$/,+1d
    /^>D$/,+1d
    $ sed -f <(sed 's|.*|/^>&$/,+1d|' f1) f2
    >B
     GGGGG
    >C
     CCCC
    
    • 为每一行创建命令,+n 表示匹配行之后的 n 行
    • 然后使用这些命令对另一个文件进行操作


    如果GNU sed 不可用,请尝试

    $ sed -f <(sed 's|.*|/^>&$/{N;d;}|' f1) f2
    >B
     GGGGG
    >C
     CCCC
    
    • 这里N 命令用于将下一行添加到模式空间。然后它们被删除。多两行,使用N;N 三行使用N;N;N,依此类推


    使用awkgetline

    $ awk 'NR==FNR{a[">"$0]; next} ($0 in a) && (getline x)>0{next} 1' f1 f2
    >B
     GGGGG
    >C
     CCCC
    

    如果在f2中只能找到一个匹配项

    awk 'NR==FNR{a[">"$0];next} ($0 in a) && (getline x)>0{delete a[$0];next} 1' f1 f2
    

    【讨论】:

      【解决方案2】:

      关注awk 也可能对您有所帮助。

      awk 'FNR==NR{a[$0]=$0;next} /^>/{c=$0;sub(/^>/,"",c)} (c in a){getline;next} 1' list2.txt list1a.txt
      

      输出如下。

      >B
       GGGGG
      >C
       CCCC
      

      【讨论】:

        【解决方案3】:
        cp 2.txt /tmp/temp1
        while read var
        do
        echo $var
        sed 's,'"$var"',,g' /tmp/temp1 > /tmp/temp2
        mv -f /tmp/temp2 /tmp/temp1
        done < 1.txt
        cp /tmp/temp1 3.txt
        

        while read var
        do
        echo "s/"$var"//g" >> sed.script2
        done < 1.txt
        sed --file=sed.script2 2.txt > 3.txt
        rm -f sed.script
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-31
          • 2019-06-06
          • 2011-05-11
          • 2013-01-12
          • 2022-11-13
          • 2013-09-20
          相关资源
          最近更新 更多