SORT 清空了我的文件?

SORT 清空了我的文件?

我正在尝试sort在我的计算机上创建 csv,但每次使用该命令时似乎都会删除内容sort。我基本上创建了一个缺少第一行的 csv 副本:

sed '1d' original.csv > newcopy.csv

为了确认我的新副本缺少第一行,我可以使用以下命令进行检查head

head 1 newcopy.csv

果然,它找到了我的文件,并向我显示了原来的第二个文件(现在是第一行)。我的 csv 由多个用逗号分隔的值组成:

乔纳森·桑普森,,,,[电子邮件保护],,,佐治亚州,美国,,
Jane Doe,女士,,,[电子邮件保护],,,FL,美国,32501,

如上所示,有些字段是空的。我想根据电子邮件地址字段进行排序,该字段为 4 或 5 - 取决于命令是否sort使用从零开始的索引。所以我尝试了以下操作:

sort -t, +4 -5 newcopy.csv > newcopy.csv

所以我使用-t,来表示我的字段以逗号而不是空格结尾。我不确定是否+4 -5真的按电子邮件字段排序 - 我需要一些帮助。然后newcopy.csv > newcopy.csv用新的排序结果覆盖原始文件。

完成此操作后,如果我尝试读取第一行:

head 1 newcopy.csv

我收到以下错误:

head:无法打开‘1’进行读取:没有此文件或目录 ==> newcopy.csv <==

果然,如果我检查我的目录,该文件现在是空的,并且有 0 个字节。

答案1

重定向会在输入端读取输出文件之前将其截断。您需要使用临时文件。

编辑:

以下是一个例子:

sort -t, -k 5,5 newcopy.csv > tmp.csv && mv tmp.csv newcopy.csv

排序字段以一为基础。此命令表示仅基于字段五进行排序,输出到临时文件,并且只有当排序无错误退出时才将临时文件移回原始名称。

答案2

请注意,sort-o一个参数将结果写入文件,而不是标准输出,因此您应该执行以下操作:

sort -t, +4 -5 -o newcopy.csv newcopy.csv

因为当使用重定向运算符(例如>>>)时,shell 甚至在调用命令之前就创建/截断文件。

相关内容