我正在尝试grep另一个文件中的文件内容。我将举例说明。这是parent.txt:
# parent.txt
abc
def
ghi
jkl
这是child1.txt:
def
ghi
这是child2.txt:
jkl
mno
这是child3.txt
abc
ghi
我基本上想要做的是使用' grep -q'查找父文件中的子文件。 child1.txt的检查应该返回true,因为它是一个完整的匹配。 child2.txt的检查应返回false,因为它只是部分匹配。 child3.txt也应返回false,因为匹配必须具有凝聚力。任何建议都非常感谢。
答案 0 :(得分:1)
使用diff
,grep
和wc
,您可以获得所需内容。
count=$(diff parent.txt child1.txt | grep '^>' | wc -l)
if [[ $count > 0 ]]; then echo "false"; else echo "true"; fi
答案 1 :(得分:1)
tr "\n" " " <parent.txt | grep -q "$(tr "\n" " " <child1.txt)" && echo true || echo false
tr "\n" " " <parent.txt | grep -q "$(tr "\n" " " <child2.txt)" && echo true || echo false
tr "\n" " " <parent.txt | grep -q "$(tr "\n" " " <child3.txt)" && echo true || echo false
输出:
true
false
false
答案 2 :(得分:1)
使用bash模式匹配:
parent_contents=$(< parent.txt)
for child in child*.txt; do
if [[ "$parent_contents" == *"$(< "$child" )"* ]]; then
echo $child is cohesively contained in parent
else
echo $child is not
fi
done
child1.txt is cohesively contained in parent
child2.txt is not
child3.txt is not
封装函数:
cohesively_contains() {
local parent=$(< "$1")
local child=$(< "$2")
[[ "$parent" == *"$child"* ]]
}
for child in child*.txt; do
cohesively_contains parent.txt "$child" && echo true || echo false
done
true
false
false
答案 3 :(得分:0)
使用awk它更简单:
awk 'FNR==NR {a[$1]++;next} !($1 in a)' parent.txt child1.txt
awk 'FNR==NR {a[$1]++;next} !($1 in a)' parent.txt child2.txt
mno
答案 4 :(得分:0)
#!/usr/bin/gawk -f
{
if (NR == FNR) {
a[$0] = FNR
b[FNR] = $0
} else if (FNR == 1) {
if (!(p = a[$0]))
nextfile
} else if ($0 != b[++p]) {
p = 0
nextfile
}
}
ENDFILE {
if (p)
print FILENAME
}
用法:
gawk -f script.awk parent.txt child1.txt child2.txt child3.txt
输出:
child1.txt
使用
ENDFILE {
print FILENAME (p ? ": true" : ": false")
}
输出:
child1.txt: true
child2.txt: false
child3.txt: false