Localizar colunas não nulas | bater

0

Eu tenho um feed em hdfs.

Eu tenho que encontrar as linhas que tem a terceira coluna como não nula.

O feed é separado pelo delimitador |

Equivalente a SQL

select * from feed_table where column_3 is not null;

Entrada:

1|abc|123
2|def|
3|ff|124
4|gh|

Saída: aqui a terceira coluna não é nula.

1|abc|123
3|ff|124
    
por Tom J Muthirenthi 01.03.2018 / 15:48

2 respostas

6

Você pode usar awk para esta tarefa. Configure o delimitador em awk para | e, em seguida, verifique se a terceira coluna não é uma cadeia vazia.

$ cat /tmp/foo 
1|abc|123
2|def|
3|ff|124
4|gh|
$ awk -F'|' '$3 != ""' /tmp/foo
1|abc|123
3|ff|124
    
por 01.03.2018 / 16:11
4

Duas opções grep :

grep -v '|$' < input

O acima procura por linhas que não terminem com um pipe. Se o seu arquivo de dados tiver apenas três colunas, este é um atalho para encontrar (excluir) linhas que não tenham dados após o último (segundo) canal.

grep '|[^|].*|.' < input

O acima é um pouco mais rigoroso; ele exige a presença de um símbolo de pipe, seguido por qualquer coisa, exceto um símbolo de pipe ( [^|] ), seguido por qualquer coisa, seguido por um símbolo de pipe, seguido por algo ( . ). Isso permitiria um campo vazio primeiro .

    
por 01.03.2018 / 16:16