Редактировать первый столбец csv с помощью sed или awk в bash

Это очень больно.

  • Использование функции. Не пытайтесь впихнуть код в переменную. Я предполагаю, что вы используете оболочку типа POSIX -(sh, bash, ksh,... ), но я могу ошибаться.
  • Соберите необходимую информацию и используйте 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]
}
0
11.10.2019, 22:33
3 ответа

Если вы хотите удалить все после первой точки с запятой в каждой строке:

Сcut:

cut -d';' -f1 file
  • -d';'используйте точку с запятой в качестве разделителя
  • -f1напечатать первое поле

Сawk:

awk -F';' '{ print $1 }' file

Аналогичноcut:Используйте точку с запятой в качестве разделителя полей ввода и печатайте первое поле.


Сsed:

sed 's/;.*//' file

Замените точку с запятой и любые последующие символы пустой строкой.

2
28.01.2020, 02:17

Так как это первый столбец, я думаю (GNU )sed достаточно. Предполагая, что разделители столбцов являются вкладками:

sed -E 's/^(.*);.*\t/\1\t/' file
1
28.01.2020, 02:17

Ваша ОС содержит множество небольших и простых инструментов для обработки текста. В этом случае я бы использовалcut:

cut -d; -f1 <FILE >tmpfile && mv tmpfile FILE
1
28.01.2020, 02:17

Теги

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