Как напечатать столбцы, содержащие предложения, не теряя все после первого слова в awk printf? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть команда

paste dataset1.txt dataset2.txt | голова -7 | вырезать -f3,5 | awk '{printf "% -20s% s \ n", $ 1, $ 0} '

для отображения двух столбцов из двух отдельных файлов в отформатированном виде. Но проблема в том, что 2-й столбец (или столбец № 5, который я получил от использования cut -f3,5, состоит из предложений, а не отдельных слов (например, название страны), как вы можете видеть ниже, это Description, поэтому он не отображается все, кроме первого слова, например, Defines в 2nd and 3rd row.

Нежелательная альтернатива, которую я использовал (, приведенная ниже ), была $ 0, но она отображала все столбцы. Есть ли способ изменить указанную выше команду таким образом, чтобы она отображала Description как есть, не получая лишних столбцов и не получая только отдельные слова?

Output of the command

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

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

Давайте предположим, что вы где-то допустили ошибку при обработке данных, и ваш файл fruits.txt выглядит следующим образом:

apple orange elephant banana nectarine
guava kiwi mouse grape pear

Вы, очевидно, хотитечтобы избавиться от поля 3, вы можете удалить $3, что приведет к повторному анализу строки:

awk '{$3=""; print}' fruits.txt

Выход

apple orange  banana nectarine
guava kiwi  grape pear

НадеемсяВы можете приспособить это к вашей ситуации.

0 голосов
/ 11 сентября 2018

Вместо того, чтобы предлагать, как лучше написать то, что вы хотите, этот ответ состоит в том, чтобы ответить только на ваш прямой вопрос

Поэтому мой вопрос состоит в том, как удалить столбец из набора столбцов - $ 0?

awk '{x=$1; $1=""; printf "%-20s %s \n", x, $0}'

> echo "this is a multiple word sentence" | awk '{x=$1; $1=""; printf "%-20s %s \n", x, $0}'
this                  is a multiple word sentence
0 голосов
/ 11 сентября 2018

Используемая вами команда:

paste file1 file2 | cut -f3,5 | awk '{printf "%-20s %s \n", $1, $0}'

Однако здесь есть кое-что интересное.

  • Команда paste записывает строки, состоящие из последовательно соответствующих строк из каждого файла, разделенных TAB , в стандартный вывод.
  • Команда cut имеет TAB в качестве разделителя по умолчанию для ввода и вывода.

Итак, в конце все, что нужно сделать, это сказать awk использовать TAB в качестве разделителя, вместо его значения по умолчанию любой формы пробела :

paste file1 file2 | cut -f3,5 | awk -F'\t' '{printf "%-20s %s \n", $1, $2}'

но на самом деле, мы можем положить разрез вместе с awk

paste file1 file2 | awk -F'\t' '{printf "%-20s %s \n", $3, $5}'

Примечание: мы, возможно, даже можем объединить file1 и file2 в командной строке awk. paste в awk будет выглядеть так:

awk 'BEGIN{OFS="\t"}(NR==FNR){a[NR]=$0;next}{print a[NR], $0}' file1 file2

Таким образом, строка while может быть записана как:

awk 'BEGIN{FS=OFS="\t"}
     (NR==FNR){a[NR]=$0;next}
     {$0=a[NR] OFS $0}
     { printf "%-20s %s \n", $3, $5 }' file1 file2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...