Какая команда (команды) подаст файл разделенного текста вкладки и сократит каждую строку к 80 символам?

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

2 cores + hyper threading = 4 reported CPUs
8
25.12.2014, 22:11
5 ответов

Одна утилита, которая должна действительно учитывать ширину дисплея, это fold : к сожалению, у нее, похоже, нет возможности отбросить, а не обернуть. Хотя это, вероятно, ужасно неэффективно, вы, однако, могли бы сделать что-то вроде

while read -r line; do fold -w80 <<< "$line" | head -n1; done < file
-121--48661-

Может ли ваш ПК иметь плохую батарею BIOS, а когда Вы останавливаетесь и затем включаете ПК, время BIOS сбрасывается?

-121--246412-

Я думаю, что вы ищете развернуть и/или unext . Похоже, вы пытаетесь обеспечить, чтобы ширина \t ab считывалась как 8 символы, а не как один символ. fold также сделает это, но он обернет свой вход в следующую строку, а не усечит ее. Я думаю, вы хотите:

expand < input | cut -c -80

expand и unestand оба POSIX указаны :

  • Утилита expand должна записать файлы или стандартный ввод в стандартный вывод с \t ab символами, замененными одним или несколькими пространства символами, необходимыми для вставки в следующую позицию табуляции. Любые символы backspace копируются в выходные данные и приводят к уменьшению количества позиций столбцов для расчетов табуляции; число позиций столбцов не должно уменьшаться ниже нуля.

Довольно просто. Итак, вот посмотрите на то, что это делает:

unset c i; set --;                                                             
until [ "$((i+=1))" -gt 10 ]; do set -- "$@" "$i" "$i"; done                      
for c in 'tr \\t \ ' expand;  do eval '                                           
    { printf "%*s\t" "$@"; echo; } | 
      tee /dev/fd/2 |'"$c"'| { 
      tee /dev/fd/3 | wc -c >&2; } 3>&1 |
      tee /dev/fd/2 | cut -c -80'
done

, пока цикл в верхней части не получит набор данных, как...

1 1 2 2 3 3 ...

Он printf имеет флаг % * s arg набивки, поэтому для каждого из тех, кто находится в наборе printf , будет заполнено столько места, сколько указано в номере аргумента. К каждому из них добавляется символ \t ab.

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

И эффекты таковы:

1        2        3        4        5        6        7        8                9               10
1  2   3    4     5      6       7        8         9         10 
1  2   3    4     5      6       7        8         9         10 
66
1        2        3        4        5        6        7        8                9               10
1        2        3        4        5        6        7        8                9               10 
1        2        3        4        5        6        7        8                
105

Эти строки выстроены в два набора, как...

  1. вывод printf...; эхо
  2. выход tr... или развернуть
  3. выход вырезать
  4. выход wc

Первые четыре строки являются результатами фильтра tr - в котором каждая \t ab преобразуется в один космос .

И в нижней четверке результаты расширить цепочку.

9
27.01.2020, 20:11

Для интересующихся. Оказалось, что была какая-то коррупция ЛВМ. Я предполагаю, что я изменяю размер разделов LVM. Удалось получить Live CD загрузки CentOS 7 и каждый раз, когда я пытаюсь монтировать нужный раздел, я получаю Kernel Panic. Так что мой наконечник любому. Если вы изменили размер разделов LVM, это, вероятно, является причиной паники.

-121--150680-

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

«\t »получает колокол

«\t» получает колокол

«\t\t »получает список каталогов

«\t\t» получает Дисплей всех возможностей (а затем, если я нажму «\t »после этого на новой командной строке, я получу его снова вместо колокола)

-121--26580-

Поскольку вкладки больше предназначены для выравнивания, чем для разграничения, одним из способов может быть использование столбца , а затем вырезание :

column -s '\t' -t <some-file | cut -c -80

Кажется, что столбец не является POSIX. Это часть BSD utils на Ubuntu, поэтому я предполагаю, что это довольно кросс-платформа.

3
27.01.2020, 20:11

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

«\t »получает колокол

«\t» получает колокол

«\t\t »получает список каталогов

«\t\t» получает Дисплей всех возможностей (а затем, если я нажму «\t »после этого на новой командной строке, я получу его снова вместо колокола)

-121--26580-

Поскольку вкладки больше предназначены для выравнивания, чем для разграничения, одним из способов может быть использование столбца , а затем вырезание :

column -s '\t' -t <some-file | cut -c -80

Кажется, что столбец не является POSIX. Это часть BSD utils на Ubuntu, поэтому я предполагаю, что это довольно кросс-платформа.

-121--48658-

Использование awk :

awk '{ $0 = substr($0, 1, 80) }1' file

На основе ответа Криса Дауна здесь .

0
27.01.2020, 20:11

Одна из утилит, которая должна быть по-настоящему отображать ширину, это fold : к сожалению, у нее, кажется, нет возможности отбрасывать вместо обертывания. Хотя она, вероятно, ужасно неэффективна, тем не менее, вы можете сделать что-то вроде

while read -r line; do fold -w80 <<< "$line" | head -n1; done < file
0
27.01.2020, 20:11

Предложение Дона в комментариях было хорошим началом.

Это то, что мне нужно было для того, чтобы он (в основном) заработал:

pr +1 -1 -t -m -l1000 -w 80 tabfile

Флаг -m был нужен для того, чтобы флаг -w вступил в силу для одного столбца. Для обозначения этого в man-странице может понадобиться некоторое переписывание.

При попытке обходного пути я обнаружил, что pr выводит \t символы, поэтому подача его результатов на cut привела к той же самой проблеме.

-1 (флаг столбца) конкретно говорит в man-странице:

Эта опция не должна использоваться с -m.

Однако без этой опции pr усекает строки волей-неволей, намного короче заданной длины.

pr также вставляет пробел перед (или после?) каждым словом в поле (т.е. в каждом месте, где есть один пробел, есть два после обработки). Если слов слишком много, вставляемые пробелы игнорируют ограничение -w (создавая обходной путь). Но, как ни странно, другие, не разделенные пробелами (т.е. расположенные белыми пробелами), "столбцы" остаются выстроенными.

1
27.01.2020, 20:11

Теги

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