команда grep в цикле оболочки bash

$ jq 'map_values(tostring)' file.json
{
  "id": "1",
  "customer": "user",
  "plate": "BMT-216-A",
  "country": "GB",
  "amount": "1000",
  "pndNumber": "20000",
  "zoneNumber": "4"
}

Перенаправить на новый файл, а затем переместить его на исходное имя файла.

Для более тщательного преобразования чисел в не -плоских структурах в строки рассмотрим

jq '(..|select(type == "number")) |= tostring' file.json

Это будет рекурсивно проверять каждое значение в данном документе и выбирать те, которые являются числами. Затем выбранные значения преобразуются в строки. Строго говоря, он также будет смотреть на ключи, но, поскольку они не могут быть простыми числами в JSON, ключ не будет выбран.

Пример:

$ jq. file.json
{
  "a": {
    "b": 1
  },
  "b": null,
  "c": [
    1,
    2,
    "hello",
    4
  ]
}
$ jq '(..|select(type == "number")) |= tostring' file.json
{
  "a": {
    "b": "1"
  },
  "b": null,
  "c": [
    "1",
    "2",
    "hello",
    "4"
  ]
}

Чтобы дополнительно процитировать null, замените select()на

.
select(type == "number" or type == "null")
0
19.08.2019, 08:54
3 ответа
  1. Не читать строки файла сfor

  2. используйте параметр grep -fдля предоставления файла, содержащего шаблоны , поэтому вам вообще не нужно зацикливаться:

    grep -i -f filelist.txt out.log > result.txt
    

    Теперь у вас есть один вызов grep вместо одного на строку. Если out.log большой, ваш процессор будет вам благодарен.

3
28.01.2020, 02:29

Попытался использовать приведенный ниже скрипт, все работает нормально

for i in `cat filelist.txt`
do
for j in `cat out.log`
do
grep -i "$j" $i
done
done

filelist.txt.====> Consists of filenames
-1
28.01.2020, 02:29

Ну... большинство ответов здесь верны, это моя беда, файл "filelist.txt" был сгенерирован из Excel и в Windows. Как только я конвертирую файл в формат unix. все работало.

Я усвоил очень -урок, отнявший много времени. Миллион благодарностей каждому ответившему на вопрос:)

Всем хорошего дня!

0
28.01.2020, 02:29

Теги

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