我有一个文本文件,这个格式有很多行(每两个#之间的行被定义为一个组):
# some str for test
hdfv 12 9 b
cgj 5 11 t
# another string to examine
kinj 58 96 f
dfg 7 26 u
fds 9 76 j
---
key.txt:
string to
---
output:
# another string to examine
kinj 58 96 f
dfg 7 26 u
fds 9 76 j
我应该从以#开头的行搜索一些关键字(字符串,to),如果key.txt(一个有两列的文件)中不存在关键字,那么我应该删除该行和以下行(我写了这段代码没有结果!(关键词在输入文件中一起作为例子)
cat input.txt | while IFS=$'#' read -r -a myarray
do
a=${myarray[1]}
b=${myarray[0]}
unset IFS
read -r a x y z <<< "$a"
key=$(echo "$x $y")
if grep "$key" key.txt > /dev/null
then
echo $key exists
else
grep -v -e "$a" -e "$b" input.txt > $$ && mv $$ input.txt
fi
done
有人可以帮助我吗?
答案 0 :(得分:0)
获取正确阻止的一种简单方法是使用awk
并更正记录选择器:
awk 'FNR==NR {a[$0];next} { RS="#";for (i in a) if ($0~i) print}' key.txt input.txt
another string to examine
kinj 58 96 f
dfg 7 26 u
fds 9 76 j
这应该重新插入使用的#
并删除多余的空行。我可能是更简单的方法,但这很有效。
awk 'FNR==NR {a[$0];next} { RS="#";for (i in a) if ($0~i) {sub(/^ /,RS);sub(/\n$/,x);print}}' key.txt input.txt
#another string to examine
kinj 58 96 f
dfg 7 26 u
fds 9 76 j