2015-02-06 86 views
1

試圖在Windows下使用Unix加入命令(unxutils),我得到奇怪的結果。Unix加入命令(在Windows上) - 回車符/換行符不一致

輸入文件是File_1.txt和File_2.txt。這些文件中的每一行都以標準的Windows CR/LF結尾。

File_1.txt

Path,CurrentFileCount1,CurrentFileSize1,FileCount1 **CRLF** 
"c:\program files\Common Files\System\ado",1,2,3 **CRLF** 
"c:\program files\Common Files\System\en-US",11,22,33 **CRLF** 
"c:\program files\Common Files\System\msadc\en-US",111,222,333 **CRLF** 
"c:\program files\Common Files\System\msadc",1111,2222,3333 

File_2.txt

Path,CurrentFileCount2,CurrentFileSize2,FileCount2 **CRLF** 
"c:\program files\Common Files\System\ado",4,5,6 **CRLF** 
"c:\program files\Common Files\System\en-US",44,55,66 **CRLF** 
"c:\program files\Common Files\System\msadc\en-US",444,555,666 **CRLF** 
"c:\program files\Common Files\System\msadc",4444,5555,6666 

每個文件都有4個字段,我在每個文件接合在所述第一場。

使用-o參數我省略了每個文件中的最後一個字段,結果如預期的那樣在每行後面有一個CR/LF。

Files_joined_3_fields.txt

Path,CurrentFileCount1,CurrentFileSize1,CurrentFileCount2,CurrentFileSize2 **CRLF** 
"c:\program files\Common Files\System\ado",1,2,4,5 **CRLF** 
"c:\program files\Common Files\System\en-US",11,22,44,55 **CRLF** 
"c:\program files\Common Files\System\msadc\en-US",111,222,444,555 **CRLF** 
"c:\program files\Common Files\System\msadc",1111,2222,4444,5555 **CRLF** 

但是如果我包括兩個文件或兩個文件的所有4個領域的所有4場我得到的第4場後單CR。

Files_joined_4_fields_left.txt

Path,CurrentFileCount1,CurrentFileSize1,FileCount1 **CR** 
,CurrentFileCount2,CurrentFileSize2 **CRLF** 
"c:\program files\Common Files\System\ado",1,2,3 **CR** 
,4,5 **CRLF** 
"c:\program files\Common Files\System\en-US",11,22,33 **CR** 
,44,55 **CRLF** 
"c:\program files\Common Files\System\msadc\en-US",111,222,333 **CR** 
,444,555 **CRLF** 
"c:\program files\Common Files\System\msadc",1111,2222,3333,4444,555 **CRLF** 

Files_joined_4_fields_right.txt

Path,CurrentFileCount1,CurrentFileSize1,CurrentFileCount2,CurrentFileSize2,FileCount2 **CR** 
**CRLF** 
"c:\program files\Common Files\System\ado",1,2,4,5,6 **CR** 
**CRLF** 
"c:\program files\Common Files\System\en-US",11,22,44,55,66 **CR** 
**CRLF** 
"c:\program files\Common Files\System\msadc\en-US",111,222,444,555,666 **CR** 
**CRLF** 
"c:\program files\Common Files\System\msadc",1111,2222,4444,5555,6666 **CRLF** 

Files_joined_4_fields_both.txt

Path,CurrentFileCount1,CurrentFileSize1,FileCount1 **CR** 
,CurrentFileCount2,CurrentFileSize2,FileCount2 **CR** 
**CRLF** 
"c:\program files\Common Files\System\ado",1,2,3 **CR** 
,4,5,6 **CR** 
**CRLF** 
"c:\program files\Common Files\System\en-US",11,22,33 **CR** 
,44,55,66 **CR** 
**CRLF** 
"c:\program files\Common Files\System\msadc\en-US",111,222,333 **CR** 
,444,555,666 **CR** 
**CRLF** 
"c:\program files\Common Files\System\msadc",1111,2222,3333,4444,5555,6666 **CRLF** 

如果我不使用包含所有字段的-o參數,則會發生同樣的情況。結果是一樣的東西在顯示Files_joined_4_fields_both.txt

我知道,我可以用sed來擺脫這些多餘的CR的,但我很好奇,爲什麼他們都存在。

回答

0

我知道我可以使用sed來擺脫這些多餘的CR,但我很好奇他們爲什麼出席。

很明顯,這個版本的join不遵守Windows行結尾約定輸入;它會將CR視爲最後一個字段的一部分,因此在輸出中出現最後一行的字段時,它將CR作爲其最後一個字符。