试图在Windows(unxutils)下使用Unix join命令,我得到了奇怪的结果。
输入文件是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 :(得分:0)
我知道我可以使用sed来摆脱这些无关的CR,但我是 好奇他们为什么在场。
显然这个版本的join
并不尊重Windows行结束约定的输入;它将CR视为最后一个字段的一部分,因此无论在输出中出现一行的最后一个字段,它都将CR作为其最后一个字符。