базовая команда bash в Ubuntu: wc -l < file1.txt > file2.txt против wc -l < file1.txt > file1.txt [дубликат]

i реализовал его, используя fft в matlab и проверив гистограмму среднего значения вычисления fft и std, но также можно выполнить функцию

fa =  abs(fftshift(fft(sharp_img)));
fb = abs(fftshift(fft(blured_img)));

f1=20*log10(0.001+fa);
f2=20*log10(0.001+fb);

figure,imagesc(f1);title('org')
figure,imagesc(f2);title('blur')

figure,hist(f1(:),100);title('org')
figure,hist(f2(:),100);title('blur')

mf1=mean(f1(:));
mf2=mean(f2(:));

mfd1=median(f1(:));
mfd2=median(f2(:));

sf1=std(f1(:));
sf2=std(f2(:));
1
задан Allan 18 March 2019 в 12:46
поделиться

3 ответа

Когда вы пишете команду wc -l < file1.txt > file1.txt, ваша оболочка сначала прочитает команду целиком и перенаправит стандартный ввод, выводимый с / на file1.txt.

Затем, когда файл открыт для записи с использованием >, если файл существует, он будет перезаписан и будет создан пустой файл. затем процесс (ваш wc) начнет выполнение и запишет его до конца выполнения.

Однако ваш wc -l должен будет прочитать файл и сосчитать количество строк в нем, так как файл пуст (перезаписан), он просто поместит в него дамп:

   0 file1.txt

Чтобы доказать это посмотрите, что происходит в режиме добавления, используя >>

$ cat file1.txt
a
b
b
$ wc -l file1.txt 
       3 file1.txt
$ wc -l file1.txt >> file1.txt 
$ cat file1.txt 
a
b
b
       3 file1.txt

Содержимое вашего файла не повреждено, и wc правильно считывает количество строк перед добавлением результата в файл.

Примечание:

В общем, никогда не рекомендуется писать и читать в одном и том же файле, за исключением случаев, когда вы точно знаете, что делаете. Некоторые команды имеют опцию inline для изменения файла во время выполнения команды, и настоятельно рекомендуется использовать их, поскольку файл не будет поврежден, даже если команда вылетает в середине выполнения.

0
ответ дан Allan 18 March 2019 в 12:46
поделиться

Попробуйте >> в file1.txt вместо >. >> будет добавляться к файлу в отличие от >, перезаписывая весь файл. Попробуйте -

    wc -l < file1.txt >> file1.txt
0
ответ дан ViKiG 18 March 2019 в 12:46
поделиться

Это потому, что перенаправления имеют более высокий приоритет, чем другие команды. Здесь файл1 будет очищен перед выполнением каких-либо операций с ним

0
ответ дан Anirudh Simha 18 March 2019 в 12:46
поделиться