我有2個nix文件。所有的數據都在每個文件的一行中。每個值由空字符分隔。有些關閉數據匹配中的值。將2個Unix文件和輸出匹配行與新文件進行比較?
我該如何解析這個數據到一個只列出匹配值的新文件?
我想我可以使用sed將空字符更改爲換行符?從那裏開始我並不確定...
任何想法?
我有2個nix文件。所有的數據都在每個文件的一行中。每個值由空字符分隔。有些關閉數據匹配中的值。將2個Unix文件和輸出匹配行與新文件進行比較?
我該如何解析這個數據到一個只列出匹配值的新文件?
我想我可以使用sed將空字符更改爲換行符?從那裏開始我並不確定...
任何想法?
使用tr
,sort
和comm
:
轉換零點到新的線路,並將結果進行排序:
$ tr '\000' '\n' < file1 | sort > file1.txt
$ tr '\000' '\n' < file2 | sort > file2.txt
然後使用comm
來獲取兩者共同文件中的行:
$ comm -1 -2 file1.txt file2.txt
<lines shown here are the common lines between file1.txt and file2.txt>
如果file1或file2中沒有重複值,則可以這樣做:
(tr '\0' '\n' < file1; tr '\0' '\n' < file2) | sort | uniq -c | egrep -v '^ +1'
這將計算兩個文件之間的所有重複值。
如果字段的順序是非常重要的,你可以這樣做:
comm -1 -2 <(tr '\0' '\n' < file1) <(tr '\0' '\n' < file2)
這種做法是不可移植的,它需要猛砸的「進程替換」功能。
這可能會爲你工作:
parallel 'tr "\000" "\n" <{} | sort -u' ::: file{1,2} | sort | uniq -d
是一個單一的文件中有重複的值?一些示例數據會有所幫助。 – 2012-01-04 04:46:08
將定位有任何區別,或者你只是在文件中的任何一點尋找匹配的存在?正如@JohnZwinck所說,樣本數據會有所幫助。 – Radix 2012-01-04 05:00:10
定位沒有區別,可能有重複的值。 – rreeves 2012-01-04 05:33:22