簡體   English   中英

如果僅包含一個字符串(兩個文件),則打印行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM