如果最多包含一个文件2的字符串,我想从文件1中打印一行。
文件1:
key1 value1 value2 value8 value9
key2 value1 value3 value9
key3 value1 value8 value10
文件2:
value1
value2
value3
value4
value5
value6
value7
期望的输出:
key3 value1 value8 value10
谢谢,Bernardo
答案 0 :(得分:2)
使用awk
:
$ awk 'NR==FNR{a[$1]++; next}
{
c=0;
for(i=2;i<=NF;i++){
if($i in a){c++}
}
}
c<=1;' file2 file1
key2 value1
NR==FNR{a[$1]++; next}
:在读取第一个文件时(当文件的行号FNR等于所有输入的行号NR时),保存a
数组中的第一个字段。然后,跳到下一行。这将一直运行,直到脚本将继续到其他行时到达第二个文件。c=0;
:将计数器重置为0. for(i=2;i<=NF;i++){}
:对于从第2行到最后一行的每个字段。if($i in a){c++}
:如果当前字段位于c
,如果在第一个文件中找到,则将a
加1。c<=1
:这是awk
的简写if(c<=1){print}
。答案 1 :(得分:1)
$ grep -v '.*value1.*value2.*' input
key2 value1
假设input
文件包含
key1 value1 value2
key2 value1
答案 2 :(得分:0)
这似乎有效
cat file2 | awk '{print "\\b" $1 "\\b"}' | grep -n -o -f - file1 | cut -d: -f1 | uniq -c | awk '$1==1{print $2}' | xargs -r -i -n1 sed -n "{} p" file1