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