Unix for loop не работает

Tal vez la CPU se esté calentando demasiado y genere pequeños errores, o arruine algunas instrucciones, pero el kernel aún puede recuperar estos errores no críticos internamente.

Recibí mensajes similares, pero en mi caso sé que es la GPU la que se está calentando demasiado. Lo que hice fue ver una transmisión en vivo de alta resolución -en mi PC. Sé que las GPU son bastante viejas y débiles, así que esto apareció en mi registro de errores:

Feb 15 10:39:14  kernel: [ 1708.477285] nouveau 0000:03:00.0: therm: temperature (86 C) went below the 'fanboost' threshold
Feb 15 10:39:16  kernel: [ 1710.452080] nouveau 0000:03:00.0: therm: temperature (90 C) hit the 'fanboost' threshold
Feb 15 10:39:21  kernel: [ 1714.926254] nouveau 0000:03:00.0: therm: temperature (86 C) went below the 'fanboost' threshold
Feb 15 10:39:23  kernel: [ 1717.261238] nouveau 0000:03:00.0: therm: temperature (90 C) hit the 'fanboost' threshold
Feb 15 10:39:23  kernel: [ 1717.535168] Uhhuh. NMI received for unknown reason 21 on CPU 0.
Feb 15 10:39:23  kernel: [ 1717.535172] Do you have a strange power saving mode enabled?
Feb 15 10:39:23  kernel: [ 1717.535173] Dazed and confused, but trying to continue
Feb 15 10:39:32  kernel: [ 1725.650454] nouveau 0000:03:00.0: therm: temperature (86 C) went below the 'fanboost' threshold
Feb 15 10:39:33  kernel: [ 1726.662936] nouveau 0000:03:00.0: therm: temperature (90 C) hit the 'fanboost' threshold
Feb 15 10:39:37  kernel: [ 1730.652335] nouveau 0000:03:00.0: therm: temperature (86 C) went below the 'fanboost' threshold

y muchos muchos más

-4
21.02.2017, 10:28
5 ответов

Если вы хотите прочитать из файла, в каких строках есть пробелы / табуляции и т. д., вы должны использовать while цикл вместо для

CWD=/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder
cd $CWD
while read i
do
echo "file_found : $i">a.txt
done < req_files.txt
0
20.08.2021, 11:49

Кажется, вы перезаписываете содержимое файла a.txt каждый раз во время цикла.

echo "file_found : $i">a.txt

Следует заменить > на >> .

Или поместите его после готового, чтобы не открывать и не закрывать его каждый раз. Добавляя это к другому ответу, чтобы дать

done < req_files.txt > a.txt

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

1
20.08.2021, 11:49

Ваш код не содержит строк для поиска в данном каталоге и сравнения файлов внутри этого каталога с данными файлами (req_files.txt). Все, что вы делаете, это продолжайте перезаписывать (поскольку вы используете оператор > , используйте >> для добавления вместо этого) файла a.txt с содержимым req_files.txt один за другим и когда сценарий завершает работу, остается только последний элемент, записанный в a.txt.

Насколько я понимаю, ваша цель:

Найти и перечислить все файлы внутри указанного пути. Затем сравните этот список с файлами, перечисленными в req_files.txt. И, наконец, перечислите совпадающие в выходном файле a.txt. В этом случае код ниже сделает это за вас:

cwd=/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder
cd $cwd #change dir to the required path
>a.txt  # create output file a.txt
for file in `ls`:
do
        grep "`echo "$file"`" req_files.txt >> a.txt
done

Теперь в цикле for вы выводите список файлов с помощью команды ls. Этот сценарий создаст файл a.txt внутри заданного пути, который содержит файлы из req_files.txt, которые присутствуют в этом заданном пути.

0
20.08.2021, 11:49

Оператор перенаправления нужно заменить на конкатенацию

echo "file_found : $i" >> a.txt
0
20.08.2021, 11:49

Вы усекаете (очистку )выходного файла на каждой итерации цикла.

Вы также зацикливаетесь на выводе cat, что опасно, так как оболочка будет разделять вывод на пробелы, табуляции и символы новой строки (по умолчанию ), а также выполнять подстановку имени файла в результате. Если в строке указано *, она будет заменена всеми именами файлов в текущем каталоге.

Вместо:

cd /cygdrive/c/Users/abhisek.samanta/Desktop/New_folder || exit 1

while IFS= read -r line; do
    printf 'File found: %s\n' "$line"
done <req_files.txt >a.txt

Это будет чтение из файла req_files.txtи запись вывода цикла в a.txt. Файл a.txtбудет усечен перед записью в него вывода. Если он не существует, он будет создан.

Если вы хотите добавить вывод в уже существующий файл, используйте >>вместо >.

См. также:

0
20.08.2021, 11:49

Теги

Похожие вопросы