簡體   English   中英

使用bash打印列中的常用值

[英]Print common values in columns using bash

我有兩列文件

apple apple
ball cat
cat hat
dog delta

我需要提取兩列(在兩列中都出現)相同的值

apple apple
cat cat 

每列中的項目均無順序。

您能否嘗試遵循並讓我知道這是否對您有幫助。

awk '
{
  col1[$1]++;
  col2[$2]++;
}
END{
  for(i in col1){
    if(col2[i]){
      while(++count<=(col1[i]+col2[i])){
         printf("%s%s",i,count==(col1[i]+col2[i])?ORS:OFS)}
      count=""}
  }
}' Input_file

注意:如果在兩列中找到的值也出現在兩列中的次數恰好相同,它將打印這些值。

假設我可以使用unix命令:

cut -d' ' -f2 fil | egrep `cut -d' ' -f1 < fil | paste -sd'|'` -

基本上,這是這樣的:

第二個cut命令收集第一列中的所有單詞。 paste命令將它們與管道(即dog|cat|apple )連接。

第一個cut命令使用列表中第二個單詞列,並將它們通過管道傳遞到啟用了regexp的egrep命令中。

這是我能得到的最近的東西。 也許您可以遍歷整個文件,並在出現另一個文件時進行打印。

cat file.txt | gawk   '$1==$2 {print $1,"=",$2}'

要么

gawk '$1==$2 {print $1,"=",$2}' file.txt
$ awk '{a[$1];b[$2]} END{for(k in a) if(k in b) print k}' file
apple
cat

打印兩次值更改為print k,k

sort/join

$ join <(cut -d' ' -f1 file | sort) <(cut -d' ' -f2 file | sort)
apple
cat

也許,

$ function f() { cut -d' ' -f"$1" file | sort; }; join <(f 1) <(f 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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