gpt4 book ai didi

shell - 如何在Unix中应用具有相同输入和输出文件的sort和uniq?

转载 作者:行者123 更新时间:2023-12-04 16:17:18 25 4
gpt4 key购买 nike

我想对两个或多个文本文件应用一些操作(交集和重聚)所以在我将所有行放在一起之后,我必须对该文件应用排序和唯一性。问题是我想要相同的输入和输出文件(-i 不起作用)。这是我的代码:

  nr_param=$#
case $1 in

'-r')
if [ "$nr_param" = 3 ]
then
echo "reuniunea"
rm -f reuniune1.txt
cat $2 $3 >> reuniune1.txt
sort <reuniune1.txt | uniq >reuniune.txt
rm -f reuniune1.txt
else
echo "parametri incorecti"
fi;;
'-i')
if [ "$nr_param" = 3 ]
then
echo "intersectia"
rm -f intersectie.txt
grep -Fx -f $2 $3 > intersectie.txt
else
echo "parametri incorecti"
fi;;

你能帮我在不使用额外文件的情况下做同样的事情吗?如果 $2 是“intersectie.txt”,则 grep 也是如此。

最佳答案

编辑--

我在半睡半醒的时候写在下面,;-) 有一个适合你的案例的捷径

  sort -u -o file file

-u 选项使排序后的数据具有唯一性,如下所述,-o file 会将输出保存到您指定名称的任何文件中,包括相同的文件名称作为输入。

如果你想做类似的事情

  sort < file | uniq -c > uniqFileWithCounts

那么第一个想法对你没有帮助。


不要自欺欺人,即使您使用 sort -o file file 为排序的 -o(utput) 重用相同的文件名,在幕后系统必须将所有数据写入一个 tmp 文件,然后重命名为 -o file 指定的文件(同时 sort 正在将中间排序数据写入 /tmp 目录并在最终输出完成时删除它)。

所以你最好的选择是

sort <reuniune1.txt | uniq > uniqd.txt && mv uniqd.txt reuniune1.txt 

这只会覆盖 reuniune1.txt 如果 sort | uniq 进程无错退出。

健康教育

关于shell - 如何在Unix中应用具有相同输入和输出文件的sort和uniq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34497425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com