Eu sei que isso parece muito simples, mas não consigo fazê-lo funcionar ou encontrar uma opção funcional.
Linux UBUNTU OS, script bash
Preciso identificar um número de coluna com base em uma string (sempre haverá um número variável de colunas para pesquisar)
Exemplo de entrada:
STRING="Boo"
Hi Boo Jiggy
Saída de exemplo:
2
Usando awk:
Passamos sua string de pesquisa como um parâmetro awk e, em seguida, percorremos cada campo na entrada. Se o campo atual for igual ao parâmetro de pesquisa, imprimimos seu número.
Nota: isso encontrará mais de uma string se existirem, mas não funcionará para substrings.
Usando
tr
egrep
:Observe que, diferentemente da versão de @Jesse, essa variante não reconhece a linha. Então,
produzirá 2, enquanto a versão de @Jesse produzirá 1.
Não sei se isso importa para você.
Acabei de colocar a solução no script. Talvez você ache útil:
Exemplo:
Usando Raku (anteriormente conhecido como Perl_6)
Acima recebe entrada
STDIN
e usa um matcher Regex paraBoo
. O código Raku retorna a coluna separada por espaços em branco de cada correspondência, linha por linha (nenhuma correspondência em uma linha é indicada por uma linha em branco no retorno).Colunas indexadas a zero correspondentes são retornadas. (Para retornar colunas indexadas, adicione
.map(* + 1)
ao final do código). Se você quiser abstrair a string do código Raku propriamente dito, declare-a como uma variável de ambiente:Funciona muito bem para arquivos também:
Finalmente, se você tem certeza de que tem apenas uma correspondência por linha - ou deseja apenas a primeira coluna correspondente retornada - adicione uma indexação
.[0]
(ou[0]
) ao final do código.https://www.nntp.perl.org/group/perl.perl6.users/2020/07/msg9004.html
https://raku.org