Bash 我想从另一个列表中删除一个列表中包含的所有内容,以及从另一个文件中删除下一行
我想将一个列表中包含的所有内容与下一行一起从另一个列表中删除。例如: list2.txt包含:Bash 我想从另一个列表中删除一个列表中包含的所有内容,以及从另一个文件中删除下一行,bash,awk,sed,grep,Bash,Awk,Sed,Grep,我想将一个列表中包含的所有内容与下一行一起从另一个列表中删除。例如: list2.txt包含: A D >A AAAAA >B GGGGG >C CCCC >D TTTT list1a.txt包含: A D >A AAAAA >B GGGGG >C CCCC >D TTTT 我期望得到以下结果: >B GGGGG >C CCCC 其中>A和>D已与其下方的线条一起删除 我试过: input=$1 file_t
A
D
>A
AAAAA
>B
GGGGG
>C
CCCC
>D
TTTT
list1a.txt包含:
A
D
>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"
正如预期的那样,它返回已删除的“D”,但不返回A,也不返回它们下面的行。
我需要从中删除第一个列表中包含的任何行
第二个文件及其下面的行。
使用
GNU-sed
$ sed 's|.*|/^>&$/,+1d|' f1
/^>A$/,+1d
/^>D$/,+1d
$ sed -f <(sed 's|.*|/^>&$/,+1d|' f1) f2
>B
GGGGG
>C
CCCC
- 此处
命令用于将下一行添加到图案空间。然后它们被删除。对于另外两行,使用N
三用N;N
等等N;NN
使用
awk
和
如果在f2中只找到一个匹配项
awk 'NR==FNR{a[">"$0];next} ($0 in a) && (getline x)>0{delete a[$0];next} 1' f1 f2
下面的
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
cp 2.txt/tmp/temp1
读var时
做
echo$var
sed's,“$var”,,g'/tmp/temp1>/tmp/temp2
mv-f/tmp/temp2/tmp/temp1
完成<1.txt
cp/tmp/temp1 3.txt
或
读取变量时
做
echo“s/”$var//g“>>sed.script2
完成<1.txt
sed--file=sed.script2 2.txt>3.txt
rm-f sed.script
>B
GGGGG
>C
CCCC
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