как использовать awk/cut для получения данных столбца, которые имеют пространство

Существует "куча" их. Необходимо смотреть на НОВОЗЕЛАНДЦА и SUSEStudio...

Например, ownCloud-in-a-box: http://susestudio.com/a/TadMax/owncloud-in-a-box

Существует много стилей Fedora "вращения", опубликованные в SUSEstudio (можно даже вращать некоторых из них онлайн в "облаке" и испытать их, не загружая ISO для установки при помощи, Делают пробную поездку), http://susestudio.com/browse

Можно создать собственный аромат openSUSE с помощью НОВОЗЕЛАНДЦА (даже включают собственный брендинг вместо openSUSE или Novell). Очень удобный для системы киоска, например.

5
24.02.2015, 16:13
3 ответа

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

cat <data file> | awk -F"\t" '{print $1, $2}'

root@ubuntu32:/tmp# cat testtext | awk -F"\t" '{print $1, $2}'
16 SQL*Plus
16 TOAD background query session
2
27.01.2020, 20:40

Понравилось предложение @Costas, а другой вариант:

gawk '
  {
    f1=substr($0,2,2)
    f2=substr($0,4,36)
    gsub(/ *$/, "", f2)
    print f1 " " f2
  }
'
1
27.01.2020, 20:40

Один из способов сделать это - использовать нераскрытый . Описание для него и утилиты expand можно найти здесь :

  • Утилита Unpand копирует файлы или стандартный ввод в стандартный вывод, конвертируя символов в начале каждой строки в максимальное количество символов, за которым следует минимальное количество символов, необходимое для заполнения того же позиции столбцов, изначально заполненные переведенными символами . По умолчанию табуляторы устанавливаются в каждой восьмой колонке. Каждый должен быть скопирован в вывод и должен вызывать уменьшение счетчика позиций столбца для вычислений табуляции; счетчик никогда не должен уменьшаться до значения меньше единицы.

Вы, вероятно, захотите использовать переключатель -a .

  • -a - Помимо перевода символов в начале каждой строки, переводите все последовательности из двух или более символов, непосредственно предшествующих позиции табуляции, до максимального количества символов, за которым следует минимальное количество символов, необходимое для заполнения тех же позиций столбцов, которые изначально были заполнены переведенным символов.

Это простая утилита для последовательного преобразования множества пробелов в табуляции. Таким образом, вы можете ...

unexpand -a <<\IN | cut -f1
 16 SQL*Plus                            vilconv1                  dox-conv2
 16 TOAD background query session       Disha                     WORKGROUP\AD
IN

... который печатает ...

 16 SQL*Plus
 16 TOAD background query session

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

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

unexpand -a <infile | filter program
1
27.01.2020, 20:40

Теги

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