Как я могу распечатать условный заголовок ПРЕЖДЕ stdout, если существует вывод на stdout

Вы могли просто использовать f ключ для корректировки отображенных столбцов. Удалите некоторые столбцы и добавьте % ЦП. Необходимо смочь видеть его затем.

7
09.03.2012, 23:07
4 ответа

sed встраивают ответ:

find ./files -mtime +90|sed '1s/^/Files stuck in queue:\n/'
7
27.01.2020, 20:15
  • 1
    Это работает и - то, что я закончил тем, что использовал. –  silvein 09.03.2012, 04:13
  • 2
    @silvein: Это кажется коротким, Ваш основной критерий, таким образом, вот несколько точек: camh's awk ответ можно настроить к тому, чтобы быть только 8 символами дольше, чем sed (выше): awk 'NR==1{print "header"}1'... но еще короче, чем вышеупомянутый, 5 символами: sed "1i header" –  Peter.O 09.03.2012, 05:50
  • 3
    @Peter. O Как со всеми вещами Unix-y, существует несколько способов сделать что-то. Но вероятность, что я могу помнить это, увеличивается, если это короче. –  silvein 13.03.2012, 20:10

Так как другие методы на самом деле не обеспечивают a bash метод, относительно как попросили:

command | while IFS= read -r line; do
    (( i )) || { printf '%s\n' 'These are the files stuck in the queue:' ; (( i++ )) ; }
    printf '%s\n' "${line}"
done

Все используемые команды являются внутренними к bash.

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

5
27.01.2020, 20:15
  • 1
    Это работало и имеет преимущество того, чтобы быть всеми bash. –  silvein 09.03.2012, 04:12

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

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

awk '!input_seen { print "header"; input_seen = 1 } 1'

Это распечатает заголовок если переменная input_seen ложь (который она принимает значение по умолчанию к тому, если неопределенный), и устанавливает его на значение истинности (1). 1 в конце другое правило, которое является кратким способом сказать: распечатайте текущую строку - Вы могли также заменить 1 с { print }.

4
27.01.2020, 20:15
  • 1
    Это работало, и я буду использовать его, но это немного длиннее, чем sed версия. –  silvein 09.03.2012, 04:13

Или,

output=$(command)
[[ -n $output ]] && { echo "header"; echo "$output"; }
0
27.01.2020, 20:15

Теги

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