2009-10-14 98 views
0

如何使用shell腳本比較兩個文件中的行。比較兩個文件中的行

我想比較一個文件中的行與其他行中的行。 diff一次會給我兩個文件的所有差異。我想要將第一個文件中的一行與第二個文件中的所有行進行比較,並將公共行作爲輸出。與行號出現在第二個文件中的行號。

+1

..這取決於你想如何比較以及你期望的輸出是什麼?差異或相同的行或行數等等, – vpram86 2009-10-14 13:49:13

+0

添加了您的評論後,它看起來像'grep'的用例。 – 2009-10-14 13:58:10

+0

家庭作業副本:http://stackoverflow.com/questions/1559387/script-unix-compare和http://stackoverflow.com/questions/1543422/how-to-compare-two-files-in-shell-script和http://stackoverflow.com/questions/1544058/how-to-replace-a-line-in-the-same-file-by-sed-in-unix-shell-scripting – 2009-10-14 14:44:15

回答

2

我不知道你問什麼,但如何:

grep -n -v "`head -1 FILE1`" FILE2 

這將使你在FILE2編號線不包含在FILE1一號線。

+0

或者如果您想要與FILE1中第一行相匹配的行,則省略'-v'。 – steveha 2009-10-14 21:50:49

0
#!/bin/sh 
diff $1 $2 
+0

我想比較第一行文件other.diff會一次給出兩個文件中的所有差異。我希望將第一個文件中的一行與第二個文件中的所有行進行比較,並將公共行作爲輸出。與行號出現在第二個文件中的行號。 – Vijay 2009-10-14 13:52:38

+0

在你的問題中這樣說會很好。 – 2009-10-14 15:41:33

0

grep -n是在你的情況下使用的工具。作爲模式,您將該行放入您想要在第二個文件中找到的第一個文件中。讓你的模式以^開始,並以$結尾並在其周圍加引號。

0

我想比較第一個文件與其他.diff會給我一次在兩個文件中的所有差異。我想要在第一個文件中的行與第二個文件中的所有行進行比較並得到公共線作爲輸出。與行號在第二個文件中存在的行號

我認爲這會變得非常接近。

#!/bin/sh 
REF='a.txt' 
TARGET='b.txt' 

cat $REF | while read line 
do 
    echo "line: $line" 
    echo '===========' 
    grep -n $line $TARGET 
done 
0

這是不優雅可言,但它是簡單

filea是:

foo 
bar 
baz 
qux 
xyz 
abc 

fileb是:

aaa 
bar 
bbb 
baz 
qux 
xxx 
foo 

然後:

while read a ; do 
    grep -n "^${a}$" fileb ; 
done < filea 

將輸出:

7:foo 
2:bar 
4:baz 
5:qux 
+0

你現在已經爲他做了功課。 – 2009-10-14 23:05:03

0

可以使用通訊命令來比較兩個文件,其給出了一組操作的格式 輸出像 - B,A交點B等

這給兩個文件中的共同行。 COMM -12 <(排序first.txt | uniq的)<(排序second.txt | uniq的)

語法 COMM [選項] ...文件1文件2

選項 -1抑制獨特到file1線 -2抑制文件2特有的行 -3抑制出現在兩個文件中的行

「 - 」文件名錶示標準輸入。

1
comm -12 file1 file2 

會顯示這兩個文件1常見的線條和file2

0

下面的代碼粘貼到一個名爲intersect.sh

while read line 
do 
    grep -n "^${line}$" $2; 
done < $1 

然後文件請確保您有該文件

執行權限
chmod 777 intersect.sh 

然後運行此命令,替換您的兩個文件的名稱

./intersect.sh nameOfLongerFile nameOfShorterFile