первые пять символов

Это зависит от того, что является выводом sensors. Если Ваш что-то как мой:

% sensors
k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +44.0°C  (high = +70.0°C)

затем можно использовать следующий сценарий, адаптируя его соответственно. Кроме того, TEMP_STOP и TEMP_START, необходимо изменить регулярное выражение, которое фильтрует строку от sensors Вы хотите использовать. Это - параметр к grep, в temp функция.

#!/bin/bash

TEMP_STOP=98
TEMP_START=90

temp() {
    sensors | grep '^temp1:' | sed -e 's/.*: \+\([+-][0-9.]\+\)°C.*$/0\1/'
}

while true; do
    TEMP=$(temp)
    # keep waiting until temp is too hot
    while [ $(echo "$TEMP < $TEMP_STOP" | bc) = 1 ]; do
        sleep 10
        TEMP=$(temp)
    done

    echo temp $TEMP too hot, stopping.

    # now wait for it to cool down...
    while [ $(echo "$TEMP > $TEMP_START" | bc) = 1 ]; do
        sleep 10
        TEMP=$(temp)
    done

    echo ok now, restarting...
done
4
29.07.2013, 02:40
4 ответа

head могло быть полезным здесь:

   -c, --bytes=[-]K
          print the first K bytes of each file; with the leading '-', print all but the last K bytes of each file
3
27.01.2020, 20:50
  • 1
    Это копирует байты, не символы. Попробуйте его своим именем. Примечание –  Marco 29.07.2013, 02:21

cut -c5 сокращает первые 5 символов каждой строки в ее входе. Если Вы хотите ограничить количество строк к 25, использовать head -n25:

cut -c5 file | head -n25
2
27.01.2020, 20:50
  • 1
    На самом деле я хочу сохранить первые 5 символов и скопировать их в 2-й файл, это работало бы также? –  user177073 28.07.2013, 23:19
  • 2
    @user177073: Да, это не изменяет исходный файл. Это произвело к стандартному выводу, если Вы хотите создать файл, просто используйте перенаправление: cut -c5 file | head -n25 > output. –  choroba 28.07.2013, 23:25
  • 3
    Хорошо вот то, что я придумал;-c5 /home/user/Desktop/parse2.txt сокращения' |> /home/user/Desktop/symbols.txt, это создает файл, но файл пуст –  user177073 28.07.2013, 23:32
  • 4
    Это не копирует первые пять символов. –  Marco 29.07.2013, 02:54
  • 5
    @user177073: Удалите | перед >. –  choroba 29.07.2013, 09:42

Можно использовать следующее sed команда:

sed                         \
  -e 's/\(^\w\{5\}\).*/\1/' \
  -e '26,$d'                \
  -e '/^$/d'                \
  input_file > output_file

Первая часть соответствует пяти символам в начале строки, печатает их и отбрасывает остальных. Вторая часть гарантирует, что только первые 25 строк печатаются. И последняя часть удаляет пустые строки.

2
27.01.2020, 20:50
  • 1
    Престижность за всестороннее, одно-служебное решение. Сделать это совместимым POSIX, замена \w с [[:alnum:]_]. Также устранить пробел (все-пробел) строки, замена /^$/ с /^[[:blank:]]*$/. –  mklement0 05.07.2015, 19:17
cat inputfile | head -c 5 > outputfile

Это должно перенаправить вывод в файл.

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

cat inputfile | tr -d ' ' | head -c 5 > outputfile

Можно также использовать следующий формат tr достигнуть того же эффекта.

cat inputfile | tr -d [:space:] | head -c 5 > outputfile

tr -d [:space:] удаляет все пробелы из текста, который был передан по каналу к этой команде.

Придерживайтесь вышеупомянутого решения, если Вы хотите усечение только для первых 5 символов файла.

Теперь, если Вы хотите сделать, это для каждой строки Вашего файла затем следует за этим:

cat inputfile | sed -e 's/ //g' | awk '{print substr($0,0,5)}' > outputfile

или

sed -e 's/ //g' < inputfile | awk '{print substr($0,0,5)}' > outputfile

Explaination: sed -e 's/ //g' удаляет все пробелы и awk '{print substr($0,0,5)}' печатает первые 5 символов everyline.

1
27.01.2020, 20:50
  • 1
    , почему downvote? Это дает желаемый вывод. Atlease упоминают то, что было неправильным. –  debal 29.07.2013, 09:39
  • 2
    Вместо cat file | command можно часто использовать command file (downvote не от меня). –  jofel 29.07.2013, 11:32
  • 3
    , я, возможно, легко обратился к перенаправлению ввода, только чтобы ясно дать понять процедуру автору вопроса, которого я использовал cat команда. Я отредактировал ответ включая новое перенаправление ввода –  debal 29.07.2013, 12:25
  • 4
    я думаю, что формулировал эту несправедливость все Ваши ответы, был очень полезен, но что я должен был спросить, был, как делают Вы копируете первую работу в строке, слово в этом случае является символом запаса от финансов Yahoo, wht мне действительно нужно, это кажется, SED или синтаксический анализ AWK, который вытянет первое слово до его конца, затем когда это будет видеть пустой или вакуум, это переходит к следующей строке. Прямо сейчас я использую этот sed-e 's///g' </home/user/Desktop/file3.txt | awk '{печатает substr (0,0,4$)}'> /home/user/Desktop/file4.txt, он работает, но он его багги и я действительно понимаем, что я изменил 5 на 4. Ваши мысли? –  user177073 02.08.2013, 03:37
  • 5
    @user177073, если необходимо извлечь только первое слово из каждой строки затем код, awk '{print $1}' /home/user/Desktop/file3.txt > /home/user/Desktop/file4.txt –  debal 02.08.2013, 05:46

Теги

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