Можно ли использовать grep или awk для сообщения о повторяющихся строках вывода, соответствующих повторяющимся записям в индексном файле?

jq -r --arg ARG1 050112 'select(.login == $ARG1)|
    ["user:",.login],
    ["lastlogintime:", if.lastLoginTime then (.lastLoginTime/1000 | strftime("%Y-%m-%d %H:%M UTC")) else "-" end],
    ["lastloginfrom:",.lastLoginFrom // "-"]
    |@tsv' file.json

То есть используйте явноеif-then-elseдля того, когда lastLoginTimeопределено или нет.

1
16.06.2020, 16:37
2 ответа

Я не думаю, что вы можете сделать это с grep, нет, но вы можете с awk. Самый простой подход, который я могу придумать, это сохранить содержимое searchfile.txtв памяти, а затем печатать его строки каждый раз, когда вы видите индекс:

$ awk -F'\t' 'NR==FNR{c[$1]=$0;next}{if(c[$1]){print c[$1]}}' searchfile.txt index.txt 
n0000003    216 -0.334  0.229   0.088   0.154
n0000003    216 -0.334  0.229   0.088   0.154
n0000008    16  0.117   0.200   0.508   0.621
n0000008    16  0.117   0.200   0.508   0.621
n0000017    218 -0.353  0.196   0.042   0.084
n0000017    218 -0.353  0.196   0.042   0.084
n0000017    218 -0.353  0.196   0.042   0.084
n0000017    218 -0.353  0.196   0.042   0.084

Если оба файла отсортированы по индексу, вы также можете использоватьjoin:

$ join -t$'\t' searchfile.txt index.txt 
n0000003    216 -0.334  0.229   0.088   0.154
n0000003    216 -0.334  0.229   0.088   0.154
n0000008    16  0.117   0.200   0.508   0.621
n0000008    16  0.117   0.200   0.508   0.621
n0000017    218 -0.353  0.196   0.042   0.084
n0000017    218 -0.353  0.196   0.042   0.084
n0000017    218 -0.353  0.196   0.042   0.084
n0000017    218 -0.353  0.196   0.042   0.084
2
18.03.2021, 23:27

Глядя на вашу попытку, кажется, что вы прошли почти рядом со стойкой ворот, но не пропустили мяч. Просто добавили цикл while к вашей попытке.

awk -F'\t' '
  FNR == NR { c[$1]++; next }
  k = c[$1] { while (k--) print }
' index.txt search.txt
0
18.03.2021, 23:27

Теги

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