Как выбрать поле / столбец из вывода `ls -l`?

Linux находится в процессе удаления вещей, которые раньше были в proc и помещали их в sysfs (высокоструктурированная файловая система для хранения информации о машине).

На моей машине я могу найти информацию об источнике питания в

/sys/class/power_supply/BAT0

У этого есть файл текущей скорости, который поддерживает скорость зарядки:

Таким образом, следующее дает вам приблизительную оценку

calc \( $(cat charge_full) - $(cat charge_now) \) / $(cat current_now)

calc поступает из пакета apcalc.

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

Вам также может быть интересно взглянуть на этот график реального времени

while true; do cat current_now; sleep 1; done | feedgnuplot --stream  --line  --ymin 0

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

18
задан 10 July 2012 в 06:15

29 ответов

Попробуйте ls -l | awk '{print $7}'.

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

32
ответ дан 25 July 2018 в 18:08

Попробуйте ls -l | awk '{print $7}'.

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

32
ответ дан 31 July 2018 в 10:38

Попробуйте ls -l | awk '{print $7}'.

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

32
ответ дан 31 July 2018 в 11:41

Попробуйте ls -l | awk '{print $7}'.

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

32
ответ дан 2 August 2018 в 00:22

Попробуйте ls -l | awk '{print $7}'.

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

32
ответ дан 4 August 2018 в 15:51

Попробуйте ls -l | awk '{print $7}'.

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

32
ответ дан 6 August 2018 в 00:29

Попробуйте ls -l | awk '{print $7}'.

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

32
ответ дан 7 August 2018 в 17:54

Попробуйте ls -l | awk '{print $7}'.

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

32
ответ дан 10 August 2018 в 06:44

Попробуйте ls -l | awk '{print $7}'.

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

32
ответ дан 15 August 2018 в 18:38
  • 1
    Как объясняет @ormaaj: не полагайтесь на фрагменты информации, доступные в определенных местах с ls. Команда find чрезвычайно полезна. – Paddy Landau 18 July 2012 в 15:02

Никогда не разбирайте ls. Используйте GNU find. Или если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для чтения данных, отличных от списков имен файлов по строкам и разбиения на поля, см.: Никогда не разбирайте ls

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

16
ответ дан 25 May 2018 в 08:49

Вы можете получить конкретный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в ответе @Corey, cut -c44-45 также будет работать после настройки (поскольку ls имеет фиксированные столбцы ) или что-то еще, однако главная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и оно изменяется в зависимости от аргументов), что делает его не машинным, поэтому не рекомендуется разбирать команду ls.

Лучше всего использовать разные доступные команды, такие как find или stat, которые могут предоставить соответствующие параметры для форматирования вывода по мере необходимости , Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней изменений, попробуйте этот пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь разные варианты BSD stat, поэтому он по-прежнему не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 25 May 2018 в 08:49
  • 1
    +1 для упоминания, что ls не следует анализировать, а также использовать stat. date однако настроен неправильно. Вы должны добавить --date=$ymd, так как date сам будет печатать текущий день, но целью здесь является преобразование формата даты файла – Sergiy Kolodyazhnyy 10 April 2016 в 07:37
  • 2
    Команда ls -la | cut -c32-33 в полной честности просто ненадежна не только из-за возможных ошибок с именами файлов, но просто потому, что она зависит от длины имени пользователя и размера файлов. Команда stat -c "%x" *.* выглядит нормально, но с помощью *.* вы ограничиваете ее только именами файлов, содержащими точку. Я предполагаю, что целью было уловить также скрытые файлы; в этом случае вы должны предварительно включить globbing для dotfiles и использовать * вместо *.*: shopt -s dotglob; stat -c "%x" * | [...]. – kos 10 April 2016 в 07:50
  • 3
    Ах, и что сказал Серг, вы должны добавить --date="$ymd" в команду date, иначе он напечатает текущий день месяца. – kos 10 April 2016 в 08:01
  • 4
    Спасибо за комментарии. Я рассмотрел эти проблемы и дал лучший пример. – kenorb 10 April 2016 в 15:11

Вы можете получить определенный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в @Corey answer , cut -c44-45 также будет работать после корректировки ( поскольку ls имеет фиксированные столбцы) или что-то еще, однако основная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и он изменяется в зависимости от аргументов) из-за того, что это не удобно для машин, поэтому не рекомендуется вообще разбирать команду ls .

Лучше всего использовать различные доступные команды, такие как find или stat, который может предоставить соответствующие параметры для форматирования вывода по мере необходимости. Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней модификаций, попробуйте следующий пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь различные опции для BSD stat, поэтому он не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 25 July 2018 в 18:08

Никогда не анализируйте ls . Используйте GNU find. Или, если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для чтения данных, кроме списков имен файлов, построчно и разделения на поля, см .: BashFAQ / 001

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

16
ответ дан 25 July 2018 в 18:08

Никогда не анализируйте ls . Используйте GNU find. Или, если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для чтения данных, кроме списков имен файлов, построчно и разделения на поля, см .: BashFAQ / 001

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

16
ответ дан 31 July 2018 в 10:38

Вы можете получить определенный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в @Corey answer , cut -c44-45 также будет работать после корректировки ( поскольку ls имеет фиксированные столбцы) или что-то еще, однако основная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и он изменяется в зависимости от аргументов) из-за того, что это не удобно для машин, поэтому не рекомендуется вообще разбирать команду ls .

Лучше всего использовать различные доступные команды, такие как find или stat, который может предоставить соответствующие параметры для форматирования вывода по мере необходимости. Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней модификаций, попробуйте следующий пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь различные опции для BSD stat, поэтому он не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 31 July 2018 в 10:38

Вы можете получить определенный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в @Corey answer , cut -c44-45 также будет работать после корректировки ( поскольку ls имеет фиксированные столбцы) или что-то еще, однако основная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и он изменяется в зависимости от аргументов) из-за того, что это не удобно для машин, поэтому не рекомендуется вообще разбирать команду ls .

Лучше всего использовать различные доступные команды, такие как find или stat, который может предоставить соответствующие параметры для форматирования вывода по мере необходимости. Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней модификаций, попробуйте следующий пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь различные опции для BSD stat, поэтому он не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 31 July 2018 в 11:41

Никогда не анализируйте ls . Используйте GNU find. Или, если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для чтения данных, кроме списков имен файлов, построчно и разделения на поля, см .: BashFAQ / 001

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

16
ответ дан 31 July 2018 в 11:41

Вы можете получить определенный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в @Corey answer , cut -c44-45 также будет работать после корректировки ( поскольку ls имеет фиксированные столбцы) или что-то еще, однако основная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и он изменяется в зависимости от аргументов) из-за того, что это не удобно для машин, поэтому не рекомендуется вообще разбирать команду ls .

Лучше всего использовать различные доступные команды, такие как find или stat, который может предоставить соответствующие параметры для форматирования вывода по мере необходимости. Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней модификаций, попробуйте следующий пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь различные опции для BSD stat, поэтому он не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 2 August 2018 в 00:22

Никогда не анализируйте ls . Используйте GNU find. Или, если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для чтения данных, кроме списков имен файлов, построчно и разделения на поля, см .: BashFAQ / 001

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

16
ответ дан 2 August 2018 в 00:22

Вы можете получить определенный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в @Corey answer , cut -c44-45 также будет работать после корректировки ( поскольку ls имеет фиксированные столбцы) или что-то еще, однако основная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и он изменяется в зависимости от аргументов) из-за того, что это не удобно для машин, поэтому не рекомендуется вообще разбирать команду ls .

Лучше всего использовать различные доступные команды, такие как find или stat, который может предоставить соответствующие параметры для форматирования вывода по мере необходимости. Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней модификаций, попробуйте следующий пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь различные опции для BSD stat, поэтому он не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 4 August 2018 в 15:51

Никогда не анализируйте ls . Используйте GNU find. Или, если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для чтения данных, кроме списков имен файлов, построчно и разделения на поля, см .: BashFAQ / 001

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

16
ответ дан 4 August 2018 в 15:51

Вы можете получить определенный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в @Corey answer , cut -c44-45 также будет работать после корректировки ( поскольку ls имеет фиксированные столбцы) или что-то еще, однако основная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и он изменяется в зависимости от аргументов) из-за того, что это не удобно для машин, поэтому не рекомендуется вообще разбирать команду ls .

Лучше всего использовать различные доступные команды, такие как find или stat, который может предоставить соответствующие параметры для форматирования вывода по мере необходимости. Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней модификаций, попробуйте следующий пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь различные опции для BSD stat, поэтому он не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 6 August 2018 в 00:29

Никогда не анализируйте ls . Используйте GNU find. Или, если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для чтения данных, кроме списков имен файлов, построчно и разделения на поля, см .: BashFAQ / 001

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

16
ответ дан 6 August 2018 в 00:29

Вы можете получить определенный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в @Corey answer , cut -c44-45 также будет работать после корректировки ( поскольку ls имеет фиксированные столбцы) или что-то еще, однако основная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и он изменяется в зависимости от аргументов) из-за того, что это не удобно для машин, поэтому не рекомендуется вообще разбирать команду ls .

Лучше всего использовать различные доступные команды, такие как find или stat, который может предоставить соответствующие параметры для форматирования вывода по мере необходимости. Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней модификаций, попробуйте следующий пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь различные опции для BSD stat, поэтому он не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 7 August 2018 в 17:54

Никогда не анализируйте ls . Используйте GNU find. Или, если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для считывания данных, кроме списков имен файлов, построчно и разделения на поля, см .: BashFAQ / 001

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

16
ответ дан 7 August 2018 в 17:54

Вы можете получить определенный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в @Corey answer , cut -c44-45 также будет работать после корректировки ( поскольку ls имеет фиксированные столбцы) или что-то еще, однако основная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и он изменяется в зависимости от аргументов) из-за того, что это не удобно для машин, поэтому не рекомендуется вообще разбирать команду ls .

Лучше всего использовать различные доступные команды, такие как find или stat, который может предоставить соответствующие параметры для форматирования вывода по мере необходимости. Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней модификаций, попробуйте следующий пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь различные опции для BSD stat, поэтому он не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 10 August 2018 в 06:44

Никогда не анализируйте ls . Используйте GNU find. Или, если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для чтения данных, кроме списков имен файлов, построчно и разделения на поля, см .: BashFAQ / 001

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

16
ответ дан 10 August 2018 в 06:44

Вы можете получить определенный столбец в оболочке, например:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

или awk, как показано в @Corey answer , cut -c44-45 также будет работать после корректировки ( поскольку ls имеет фиксированные столбцы) или что-то еще, однако основная проблема заключается в том, что он не будет надежным и пуленепробиваемым (например, в Unix это может быть $6, а не $7, и он изменяется в зависимости от аргументов) из-за того, что это не удобно для машин, поэтому не рекомендуется вообще разбирать команду ls .

Лучше всего использовать различные доступные команды, такие как find или stat, который может предоставить соответствующие параметры для форматирования вывода по мере необходимости. Например:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

Чтобы вернуть столбец только дней модификаций, попробуйте следующий пример:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

Стоит отметить, что GNU stat может иметь различные опции для BSD stat, поэтому он не будет пуленепробиваемым в разных операционных системах.

1
ответ дан 15 August 2018 в 18:38
  • 1
    +1 за упоминание о том, что ls не следует анализировать так же, как и при использовании stat. date, однако, настроен неправильно. Вы должны добавить --date=$ymd, так как date будет сам печатать текущий день, но цель здесь - преобразовать формат даты файла – Sergiy Kolodyazhnyy 10 April 2016 в 07:37
  • 2
    Команда ls -la | cut -c32-33 в полной честности просто совершенно ненадежна, не только из-за возможных ловушек с именами файлов, но просто потому, что она зависит от длины имен пользователей и от размера файлов. Команда stat -c "%x" *.* выглядит нормально, но с помощью *.* вы ограничиваете ее только именами файлов, содержащими точку. Я предполагаю, что целью было поймать также скрытые файлы; в этом случае вы должны предварительно включить глобирование для файлов точек и использовать * вместо *.*: shopt -s dotglob; stat -c "%x" * | [...]. – kos 10 April 2016 в 07:50
  • 3
    И, что сказал и Сергей, вы должны добавить --date="$ymd" к команде date, иначе она напечатает текущий день месяца. – kos 10 April 2016 в 08:01
  • 4
    Спасибо за комментарии. Я рассмотрел проблемы и представил лучший начальный пример. – kenorb 10 April 2016 в 15:11

Никогда не анализируйте ls . Используйте GNU find. Или, если переносимость не важна, stat(1).

find . -maxdepth 1 -printf '%Td\n'

Для чтения данных, кроме списков имен файлов, построчно и разделения на поля, см .: BashFAQ / 001

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

16
ответ дан 15 August 2018 в 18:38

Другие вопросы по тегам:

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