Substituição variável na declaração de impressão Awk -v

1

Eu passei mais de uma hora cutucando isso. Não pode ser tão difícil ... Eu quero imprimir uma coluna de dados de um arquivo para outro arquivo. A coluna que eu quero imprimir depende do que é passado e das coisas que acontecem anteriormente no script, mas é chamado de COL. O arquivo do qual preciso extrair as informações é chamado $ 1.db, sendo $ 1 o primeiro argumento passado (já verifiquei se ele existe). O que eu tenho atualmente:

awk -v colvar="$COL" '{ print $colvar }' "$1.db"  >> tmp2.tmp

Isso resulta em todo o conteúdo de $ 1.db sendo impresso em tmp2.tmp, não apenas na coluna.

Quando eu o xx, vejo

awk -v colvar="$COL" '{ print $colvar }' "$1.db"  >> tmp2.tmp
+ awk -v colvar=3 '{ print $colvar }' cop4342.db

Então, vejo que o awk var está sendo configurado para o valor de COL, mas não está sendo substituído dentro da declaração de impressão. Eu suspeito que é devido às citações simples, mas não sei o que fazer sobre isso. Qualquer ajuda apreciada:)

    
por Lauren 29.09.2012 / 19:40

1 resposta

2

Se tudo o que você deseja fazer é extrair uma coluna de dados, basta usar cut . Por exemplo, se o arquivo example.dat contiver

a b c d e
1 2 3 4 5

então cut -d ' ' -f 3 example.dat

c
3

O separador de campos aqui é um espaço e estamos selecionando a coluna três.

Edit: Este script bash chama o awk para produzir a saída equivalente:

#!/bin/bash
var1=$1

awk '{print $colvar}' colvar=$1 example.dat
    
por 29.09.2012 / 20:42