Можно ли поместить 2 команды в одну строку в awk? - PullRequest
1 голос
/ 09 декабря 2011

Я создал простой скрипт:

#!/bin/sh
column=${1:-1}
awk '{colawk='$column'+1; print colawk}'

Но когда я бегу:

ls -la | ./Column.sh 4

Я получаю вывод: 5 5 5 5

Но я ожидал получить 5-й столбец. Почему эта ошибка?

1 Ответ

5 голосов
/ 09 декабря 2011

Я полагаю, что это будет делать то, что вы пытались сделать в своем примере:

#!/bin/sh
let "column=${1:-1} + 1"
awk "{print \$$column}"

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

Вместо этого я бы сказал:

#!/bin/sh
let "column=${1:-1}"
awk "{print \$$column}"

Аргументом ./Column.sh будет номер столбца, который выхочу, 0 выдаст вам все столбцы, в то время как при вызове без аргументов индекс столбца по умолчанию будет 1.


Я знаю bash.Я хотел бы сделать арифметику с AWK

В таком случае, как насчет:

#!/bin/sh
column=${1:-1}
awk 'BEGIN{colawk='$column'+1} {print $colawk}'

Или просто:

#!/bin/sh
awk 'BEGIN{colawk='${1:-1}'+1} {print $colawk}'

Две вещи, которые я изменил вВаш сценарий:

  1. поместите арифметику в блок BEGIN{}, поскольку это нужно сделать только один раз, а не повторять для каждой строки ввода.
  2. "print $colawk" вместо«print colawk», поэтому мы печатаем столбец с индексом colawk вместо его значения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...