AWK: Como colocar o campo ($ 1) dentro da expressão regular para selecionar todos os prefixos?

2

Suponha que eu tenha um arquivo A:

fileA 
fileB

Suponha que eu tenha agora um arquivo chamado:

fileA_someprefix_20160101.txt

Agora eu quero corresponder todas as linhas de A que prefixam este filename , então pensei:

FILE_NAME="fileA_someprefix_20160101.txt"    
awk '"$FILE_NAME" ~ /^$1/' A.txt

Eu tentei diferentes maneiras de escapar do cifrão, mas não funcionou.

Em todos os exemplos, o campo faz parte da expressão (esquerda) em vez da expressão regular.

Como posso começar um reverse ?

    
por robert 14.03.2016 / 10:11

2 respostas

2

Você não pode consultar a variável awk dentro da expressão regular /regex/ .

Se você quiser verificar o prefixo, POSIXly, use index() function:

FN="fileA_someprefix_20160101.txt" awk 'index(ENVIRON["FN"], $1) == 1' <file

Das especificações POSIX para awk :

index(s, t)

Return the position, in characters, numbering from 1, in string s where string t first occurs, or zero if it does not occur at all.

    
por 14.03.2016 / 10:44
1

Se você está usando o GNU awk, ele permite que uma expressão de string esteja do lado direito de ~ .

awk -v FILE_NAME="$FILE_NAME" 'FILE_NAME ~ ("^" $1)'  A.txt
    
por 14.03.2016 / 18:25