![](/img/trans.png)
[英]Print multiple-line section between two strings only if this section contains certain keyword using bash?
[英]Print line if contains only one string (two files)
如果文件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
謝謝伯納多
用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}
NR==FNR{a[$1]++; next}
:讀取所述第一文件(而文件,FNR,的行數等於所有輸入,NR的行號),保存在第一個字段a
陣列。 然后,跳到下一行。 這將一直運行到到達第二個文件為止,腳本將繼續到其他行。 c=0;
:將計數器重置為0。 for(i=2;i<=NF;i++){}
:對於從第二行到最后一行的每個字段。 if($i in a){c++}
:如果當前字段位於a
(如果在第一個文件中找到),則將c
遞增1。 c<=1
:這是awk
簡寫if(c<=1){print}
。 $ grep -v '.*value1.*value2.*' input
key2 value1
假設input
文件包含
key1 value1 value2
key2 value1
這似乎有效
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.