Это очень больно.
printf
вместо всех этих echo | tr
последовательностей Это можно еще больше упростить.
v_listener_command() {
log=$( lsnrctl status | awk '/Log/ {print $4}' | sed 's,alert/log.xml,trace/listener.log,g' )
size=$( du -sk "$log" | awk '$1 / 1024 + 0.5 >= 500 {print $1}' )
printf ' Listener Log: %s - %s (Mb)\n' "$log" "$size"
}
О, я вижу, что это сценарий ожидания.
proc v_listener_command {} {
set log [exec lsnrctl status | awk {/Log/ {print $4}}]
set log [string map {alert/log.xml trace/listener.log} $log]
set size [exec du -sk $log | awk {$1 / 1024 + 0.5 >= 500 {print $1}}]
puts [format " Listener Log: %s - %s (Mb)\n" $log $size]
}
Если вы хотите удалить все после первой точки с запятой в каждой строке:
Сcut
:
cut -d';' -f1 file
-d';'
используйте точку с запятой в качестве разделителя -f1
напечатать первое поле Сawk
:
awk -F';' '{ print $1 }' file
Аналогичноcut
:Используйте точку с запятой в качестве разделителя полей ввода и печатайте первое поле.
Сsed
:
sed 's/;.*//' file
Замените точку с запятой и любые последующие символы пустой строкой.
Так как это первый столбец, я думаю (GNU )sed достаточно. Предполагая, что разделители столбцов являются вкладками:
sed -E 's/^(.*);.*\t/\1\t/' file
Ваша ОС содержит множество небольших и простых инструментов для обработки текста. В этом случае я бы использовалcut
:
cut -d; -f1 <FILE >tmpfile && mv tmpfile FILE