我在OSX 10.6.8
我在使用第一个字符排序文本文件时遇到了一些问题。
我将三个文件连接成一个,并且需要按第一个字母字母排序的最终结果。 每个文件都有如下所示的行:
A025-001 A118-001 A118-002 B657-001 D316-001
因此通过“cat”连接后的文件如下所示:
A025-001 .... A025-001 (where file 2 was appended) .... A025-001 (where file 3 was appended)
我已经尝试了“sort -k 1.1,1.1 result.txt> sortedresult.txt”以及手册页中的大量其他选项:i,b,f,s(只是猜测我希望我可能找到了正确的一个)
我需要将所有条目放在一起:
A025-001 A025-001 B....... B....... D.......
希望有更多知识渊博的人能帮助我解决这个问题。
由于
更新:数据文件本身与unix工具不兼容。如果我捕获结果文件,则只显示几行。在“vim”中打开它们会显示一堆^ M个字符。好像排序不是通过整个文件。
顶部有列标题,引号中的字段,以制表符分隔,例如“产品”\ t“类别”\ t 其余数据是制表符分隔但没有引号。 样本od -c:
0000000 " P r o d u c t N u m b e r "
0000020 \t " L o o k u p A t t r i b u
0000040 t e 1 G r o u p " \t " L o o
0000060 k u p A t t r i b u t e 1
0000100 N a m e " \t " L o o k u p A t
0000120 t r i b u t e 1 V a l u e "
0000140 \t " L o o k u p A t t r i b u
0000160 t e 1 V a l u e I m a g e
0000200 " \t " L o o k u p A t t r i b
以下是一些数据(不是列标题):
0000660 " \n A 0 2 5 - 0 0 1 \t F a c e t
0000700 \t F a c e t C o l o r \t B l u e
0000720 \t C C D D D D \t O P T I O N \t \r
有谁知道为什么会这样做?
更新#2:文件以ASCII格式从FileMaker导出。你会看到很多额外的标签,只是忽略它们,一旦我们弄清楚这一点,我就会把它们拿出来。这是整个文件以及文件的hexdump和od -c:pastebin.com/UzaUgG6C
答案 0 :(得分:1)
我认为问题只是行结尾。 ^M
个字符是回车符。 UNIX工具通常需要换行符,并且没有回车符。尝试this question的答案,或尝试运行mac2unix
。
答案 1 :(得分:1)
查看pastebin,似乎FileMaker使用\ n终止列标题并用\ r分隔您的记录。您需要首先规范化行结尾。
cat result.txt | tr '\r' '\n' | sort
答案 2 :(得分:0)
你应该简单地尝试:
cat file1.txt file2.txt file3.txt | sort > result.txt
使用-k 1.1,1.1
将无法使用,因为只有一个字段
为了使其稳定,即第一个字符相同的条目组将保持相对排序相同,您可以将-s
开关与-k 1.1,1.1
开关一起使用。 / p>
cat file1.txt file2.txt file3.txt | sort -s -k 1.1,1.1 > result.txt
我认为这是您需要的解决方案。
答案 3 :(得分:0)
尝试
sort -k1.1,1.2 result.txt > sortedresult.txt
我希望这会有所帮助。
P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,并且/或者给它一个+(或 - )作为有用的答案。