Usando sed
Isso imprimirá apenas as linhas que começam com um número positivo:
sed -n 's/^\([[:digit:]][^ ,]*\).*//p'
Combinado com um dos seus pipelines, seria parecido com:
h5totxt hsli0.126.h5 | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200 | sed -n 's/^\([[:digit:]][^ ,]*\).*//p'
Como funciona
-
-n
Isso diz a
sed
para não imprimir nenhuma linha, a menos que nós explicitamente a solicitemos. -
s/^\([[:digit:]][^ ,]*\).*//p
Isso diz
sed
para procurar por linhas que começam com um número positivo e imprimir apenas esse número.Em uma expressão regular,
^
corresponde apenas no início de uma linha.[[:digit:]]
corresponde a qualquer dígito.[^ ,]*
corresponde a qualquer coisa que segue esse dígito, exceto um espaço ou uma vírgula. Tudo isso é agrupado com parênteses para que possamos nos referir ao número mais tarde como. A linha inteira é então substituída pelo número e, com a opção
p
, informamossed
para imprimi-lo.Um costumava usar
[0-9]
para corresponder aos dígitos. Com o advento das fontes unicode, isso não é mais confiável. A expressão[[:digit:]]
, no entanto, é segura para unicode.
Alternativa usando regex estendido
Se você estiver usando o GNU sed (que é verdadeiro em todos os sistemas Linux), então a opção -r
pode ser usada para obter expressões regulares estendidas . Com a regex estendida, os parens usados para agrupamento não precisam ser ignorados:
sed -rn 's/^([[:digit:]][^ ,]*).*//p'
No OSX ou outros sistemas BSD, use -E
no lugar de -r
.
Usando o awk
Isso faz o mesmo, mas usando awk
:
awk -F, '/^[[:digit:]]/{print $1}'
Combinado com seu pipeline:
h5totxt hsli0.126.h5 | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200 | awk -F, '/^[[:digit:]]/{print $1}'