awk - отметки в солярисе для принятия командной строки arg - PullRequest
0 голосов
/ 04 января 2012

У меня есть этот скрипт, который предназначен для обрезки поля, указанного в качестве аргумента скрипта.т.е. sh script.sh file.txt "|" 2

#!/bin/bash
filename="$1"
delim="$2"
arg="$3"
gsubber="\"gsub("^[ \t]*|[ \t]*$","",'\$$arg')\""
myout=`nawk -F"$delim" -v fl="$gsubber" \'{ { fl } }1\' OFS="$delim" "$filename"`
echo "$myout"

Таким образом, этот файл 'file.txt' в качестве ввода:

sid|storeNo|latitude
9| gerdy| fd¿kjhn422-405
0000543210 |gfdjk39
gfd|fd||fd

становится этим выводом:

sid|storeNo|latitude
9|gerdy| fd¿kjhn422-405
0000543210 |gfdjk39
gfd|fd||fd

Я получаю эту ошибку: nawk: синтаксическая ошибка в контексте строки источника 1

'<<< отсутствует} nawk: выход из строя в строке источника 1 </p>

Когда кто-то может помочь с предоставлением правильного синтаксиса, у меня не должно возникнуть проблем с расширением его для поддержки нескольких полей.то есть sh script.sh file.txt "|" 2 3 может затем обрезать только 2-е и 3-е поля.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 04 января 2012

Попробуйте:

#!/bin/bash

filename=$1
delim=$2
arg=$3
regex='^[ \t]*|[ \t]*$'
myout=$(
  nawk -F"$delim" -v regex="$regex" -v arg="$arg" '
    { gsub(regex, "", $arg) }
    1' OFS="$delim" "$filename"
  )

printf '%s\n' "$myout"

Редактировать:

Для обработки нескольких полей в аргументах (см. Комментарии ниже):

#!/bin/bash

filename=$1 
delim=$2
shift 2
args=$@
regex='^[ \t]*|[ \t]*$'
myout=$(
  nawk -F"$delim" -v regex="$regex" -v args="$args" '{ 
    n = split(args, t, " ")
    for (i = 0; ++i <=n;)
      gsub(regex, "", $t[i]) 
    }1' OFS="$delim" "$filename"
  )

printf '%s\n' "$myout"
0 голосов
/ 04 января 2012

это должно работать:

#!/bin/bash
filename="$1"
delim="$2"
arg="$3"
myout=`nawk -F"$delim" -v f="$arg"  '{gsub(/^[ \t]*|[ \t]*$/,"",$f) }1' OFS="$delim" "$filename"`
echo "$myout"

вам не нужно извлекать gsub, поскольку при вызове функции gsub переменным является только индекс поля. Вы можете передать индекс поля как var в awk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...