Можно ли помочь исправить этот сценарий?
$ 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}'
Я хочу получить строки, в которых 9-й столбец> min_num_followers и <max_num_followers, и также 11-й столбец является частным.
** Я не склоняюсь к использованию awk так или иначе
Что-то как awk -F, '$9 > 500 && $9 < 1000 && $11 == "True"'
должно работать
Вам не нужно несколько команд awk
- вы можете связать логические условия с помощью &&
(или ||
, если этого требует логика).
Также вам необходимо заменить $11=private
(назначение) на $11==private
(логический тест). Так что-то вроде этого должно работать:
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
Если вы хотите, чтобы вывод был разделен запятыми, установите OFS = ","
либо в теле выражения awk
, либо в командной строке, например,
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
Просто подтвердив, что эти два оба работали:
$ 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