我想按字母顺序对一些项目进行排序,但是要采用一种非常具体的方式。
例如,我有以下列表,每个项目以逗号分隔:
monkeys, big dogs, cats
pineapple, banana, orange
yellow, red, blue, green
silver, gold, platinum
delphi, java, c++, visual basic
此处的项目由以下一段文本定义:1. 从行首开始,在第一个逗号前结束;2. 被逗号包围;3. 从最后一个逗号后开始,在行尾结束。因此空格不是分隔符,例如“big dogs”形成单个项目。
我想按字母顺序对每一行进行排序,而不改变行顺序。
我想要的结果是:
big dogs, cats, monkeys
banana, orange, pineapple
blue, green, red, yellow
gold, platinum, silver
c++, delphi, java, visual basic
我的目标列表有 3000 多行,所以它应该是一个自动化的过程。
谢谢!
答案1
Powershell一行:
$sep=","; gc infile.txt |% {$line=($_ -split $sep)|% {$_.trim()}|sort;$line -join $sep} >outfile.txt
注意:
1. 使用 PS 2join
语法,更紧凑。2
. 使用,
分隔符(如图所示)将删除单词中的所有前导/尾随空格。这就是我从上下文中假设你想要的,但如果我从字面上理解你的描述,它们应该被保留。如果您确实希望如此,请删除|% {$_.trim()}
(但这样sort
对于带有前导空格的示例来说,将无法“按预期”工作)
3. 您可以使用,<space>
(或其他任何东西)作为输出分隔符(-join ", ")
这会将任何混合输入(逗号后有或没有空格)规范化为您选择的输入。4
. PS 中输出的默认编码是 Unicode(UTF-16)。如果您需要控制它,您可以使用| out-file -Encoding <encoding_type>
而不是重定向来更改它>
。要查看可用的编码,请运行help out-file -full
答案2
这是一个应该用 python 来实现的。
import csv
f = open("sortrows.csv", 'rb')
reader = csv.reader(f)
outf = open("sortedrows.csv", 'w')
for row in reader:
row.sort()
outf.write(",".join(row) + "\n")
f.close()
outf.close()