Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: makeme в Apr 05, 2018, 07:23



Титла: Bash script за изрязване на N колона
Публикувано от: makeme в Apr 05, 2018, 07:23
Здравейте колеги,
Понеже много често ми се налага (всеки ден по много пъти :) ) да използвам awk '{print $N}' за какво ли не, искам да си го направя на скрипт примерно "kolona 2" = awk '{print $2}'.

Идеята ми беше за нещо такова:
Код
GeSHi (Bash):
  1. #!/bin/bash
  2. kolonanomer=$1
  3. awk '{print $$kolonanomer}'

Разбира се този синтаксис е грешен, но не ми идва на ума, как да го направя. Който може, нека помогне.


Титла: Re: Bash script за изрязване на N колона
Публикувано от: sudo в Apr 05, 2018, 09:54
Пробвай с
Код
GeSHi (Bash):
  1. kolonanomer="\$1"
При мен това работи
Код
GeSHi (Bash):
  1. #!/bin/bash
  2. kolonanomer="\$1"
  3. echo $kolonanomer
  4.  
srm@debian:~$ sh test.sh
$1


Титла: Re: Bash script за изрязване на N колона
Публикувано от: makeme в Apr 05, 2018, 10:06
$1 е първия подаден аргумент, за да може да се получи исканото "kolona 2" = awk '{print $2}'. Когато го ескейпнеш, го правиш стринг. Въпроса е, как да парсна на awk N като променлива, която да е първия подаден аргумент.
Код
GeSHi (Bash):
  1. awk '{print $--->N<---}'

Това което ми трябва е:
Код
GeSHi (Bash):
  1. > cat test.txt
  2. > 1 2 3
  3. > cat test.txt | awk '{print $3}'
  4. > 3
  5. > cat test.txt | kolona 3
  6. > 3

*където kolona е примерното име на скрипта, а 3 е подадения аргумент за номер на колоната


Титла: Re: Bash script за изрязване на N колона
Публикувано от: sudo в Apr 05, 2018, 10:43
Може би ти трябва това:
Код
GeSHi (Bash):
  1. function kolona() { awk "{print \$${1:-1}}"; }
  2.  
  3. :~$ date | kolona 2
  4. апр
  5. :~$ date | kolona 3
  6. 5
  7.  


Титла: Re: Bash script за изрязване на N колона
Публикувано от: makeme в Apr 05, 2018, 10:50
Много благодаря, колега. Перфектно стана.

Код
GeSHi (Bash):
  1. #!/bin/bash
  2. awk "{print \$${1:-1}}"