Как я могу использовать awk/Grep для поиска переменной в указанном столбце

Используя csvkit, можно сделать

$ csvsql --query 'SELECT b.* FROM log AS a JOIN log AS b USING (user_id) WHERE a.winner="win"' log.csv
id,user_id,winner,page_id
1,user_1,win,1
2,user_1,,10
5,user_4,win,10
6,user_5,,2
7,user_5,win,3

Но я не уверен, что это будет очень быстро на огромном входном файле. По умолчанию база данных SQLite создается, заполняется и запрашивается в фоновом режиме.

Однако это можно сделать и непосредственно в оболочке:

$ join -t ',' -1 2 -2 2 log.csv log.csv | awk -v FS=',' -v OFS=',' '$3 == "win" { print $5,$1,$6,$7 }'
1,user_1,win,1
2,user_1,,10
5,user_4,win,10
6,user_5,,2
7,user_5,win,3

Опять же, я не уверен, как это масштабируется для больших файлов. Кроме того, входной файл должен быть отсортирован по столбцу 2 (, что соответствует данным примера ).

1
14.09.2019, 23:16
1 ответ

Ваша переменная оболочки не будет расширяться внутри одинарных кавычек, используемых для программы awk.

Вы можете передать переменную оболочки в awk, используя опцию -v:

food=pizza
awk -v food="$food" '$4 == food'
0
28.01.2020, 00:00

Теги

Похожие вопросы