我想在两个或多个文本文件上应用一些操作(交集和重聚) 所以在我把所有行放在一起后,我必须对该文件应用sort和uniq。 问题是我想拥有相同的输入和输出文件(-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;;
你可以帮助我在不使用额外文件的情况下做同样的事情吗? 对于grep来说也是如此,如果$ 2将是&#34; intersectie.txt&#34;。
答案 0 :(得分:3)
编辑 -
当我半睡半醒的时候,我在下面写道;-)并且这是你案件的一个很好的捷径 sort -u -o file file
-u
选项使排序数据为uniq,如下所述,-o file
会将输出保存到您需要注意的任何文件中,包括与输入相同的名称。
如果你想做类似
的事情 sort < file | uniq -c > uniqFileWithCounts
然后第一个想法不会帮助你。
即使您使用sort -o file file
为排序的-o
(utput)重用相同的文件名,也不要自欺欺人,系统必须在后台将所有数据写入一个tmp文件,然后重命名为-o file
指定的文件(还排序是将中间排序数据写入/tmp
目录并删除最终输出完成时的数据)。
所以你最好的选择就是
sort <reuniune1.txt | uniq > uniqd.txt && mv uniqd.txt reuniune1.txt
如果sort | uniq
进程退出且没有错误,则只会覆盖reuniune1.txt。
IHTH