pegando colunas específicas de um csv

-1

Você pode ajudar a corrigir esse script?

$ private=False
$ min_num_followers=100
$ max_num_followers=1000
$ awk -v private="$private" '$11=private' ExportData_followers_memoryweaver_37677682_10.csv  |  awk -v min_num_followers="$min_num_followers" '$9 > min_num_followers'| awk -v max_num_followers="$max_num_followers" '$9 < max_num_followers'  |awk -F"," '{x+=$8} END {print x}'

Eu quero pegar as linhas nas quais a 9ª coluna é > min_num_followers e < max_num_followers e também 11th column são privados.

** Eu não sou inclinado a usar o awk de qualquer maneira

    
por Mona Jalal 07.03.2017 / 04:31

3 respostas

1

Algo como awk -F, '$9 > 500 && $9 < 1000 && $11 == "True"' deve funcionar

    
por markasoftware 07.03.2017 / 04:38
2

Você não precisa de vários comandos awk - você pode encadear as condições lógicas com && (ou || se a lógica exigir).

Além disso, você precisa substituir $11=private (atribuição) por $11==private (teste lógico). Então, algo assim deveria funcionar:

awk -F"," -v private="$private" -v min_num_followers="$min_num_followers" -v max_num_followers="$max_num_followers" '
  $11==private && $9 > min_num_followers && $9 < max_num_followers
' ExportData_followers_memoryweaver_37677682_10.csv

Se você deseja que a saída seja separada por vírgulas, defina OFS = "," no corpo da expressão awk ou na linha de comando, por exemplo.

awk -F"," -v private="$private" -v min_num_followers="$min_num_followers" -v max_num_followers="$max_num_followers" '
  $11==private && $9 > min_num_followers && $9 < max_num_followers
' OFS="," ExportData_followers_memoryweaver_37677682_10.csv
    
por steeldriver 07.03.2017 / 04:42
0

Confirmando que os dois funcionaram:

$ awk -F"," '$9 > 100 && $9 < 1000 && $11 == "False"' ExportData_followers_reddit_1702003595_10.csv | wc -l
1089
$ gawk -F"," '$9 > 100 && $9 < 1000 && $11 == "False"' ExportData_followers_reddit_1702003595_10.csv | wc -l
1089
    
por Mona Jalal 07.03.2017 / 23:20