簡體   English   中英

比較bash中的兩個文件

[英]Compare two files in bash

我有兩個文件tmp1.txt和tmp2.txt,tmp1.txt有

aaa.txt
bbb.txt
ccc.txt
ddd.txt

tmp2.txt具有

/tmp/test1/aaa.txt
/tmp/test1/aac.txt
/tmp/test2/bbb.txt
/tmp/test1/ccc.txt

我想檢查tmp1.txt中的文件是否存在於tmp2.txt中,如果存在,則顯示它具有哪個文件,因此顯示與此類似的內容

aaa.txt: test1
bbb.txt: test2
ccc.txt: test1

謝謝

使用awk

awk -F/ 'FNR==NR {a[$1];next} $NF in a {print $NF ": " $(NF-1)}' tmp1.txt tmp2.txt
aaa.txt: test1
bbb.txt: test2
ccc.txt: test1

我想使用標准工具diffbasename提出一個解決方案:

while read filename
do
    basename "$filename"
done < tmp2.txt > tmp2.basenames.txt
diff -u tmp1.txt tmp2.basenames.txt

該解決方案的主要優點是簡單。 不過,輸出看起來會有些不同,區別tmp1.txt- ), tmp2.txt+ )或兩者( ):

--- tmp1.txt    2014-09-17 17:09:43.000000000 +0200
+++ tmp2.basenames.txt  2014-09-17 17:13:12.000000000 +0200
@@ -1,4 +1,4 @@
 aaa.txt
+aac.txt
 bbb.txt
 ccc.txt
-ddd.txt

重擊解決方案:

#!/bin/bash
while read file && a=$(grep -Fw "$file" tmp2.txt)
do
   echo "$(basename $a): $(dirname $a)"
done < tmp1.txt

如果您不想使用awk,則有一些bash循環:

while read f; do
  isFound="$(grep /$f tmp2.txt 2>/dev/null)"
  if [ ! -z "$isFound" ]; then
    theDir=$(echo "$isFound"|cut -d'/' -f3)
    echo "$f: $theDir"
  fi
done <tmp1.txt

暫無
暫無

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

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