Я подозреваю, что ваш /dev/md125
смонтирован либо в usr/sap/<HANA server ID>/HDB00/backup
, либо где-то в этой папке. Если вы хотите узнать наверняка, вы можете запустить
findmnt /dev/md125
Под TARGET
вы, скорее всего, увидите каталог в папке usr/sap/<HANA server ID>/HDB00/backup
.
В противном случае также возможно, что устройство md смонтировано в другом месте и есть символическая ссылка на него в каталоге backup
, но мне это кажется маловероятным, потому что du
по умолчанию не разыменовывает символические ссылки. Чтобы подтвердить, вы можете запустить du -P
, который не будет следовать символическим ссылкам (, но опять же, это должно быть поведением по умолчанию в большинстве систем)
Редактировать:
Основываясь на вашем комментарии о том, что findmnt /dev/md125
выводит только /hana/shared
, я склонен вернуться к своей гипотезе о символической ссылке. Мне пришло в голову, что любая часть полного пути /usr/sap/<HANA server ID>/HDB00/backup
может быть символической ссылкой, поэтому вы можете проверить эти папки с помощью ls -l
просто для быстрой проверки работоспособности (, поскольку следующая команда может занять некоторое время. полный ).
В противном случае вы можете поискать в полном каталоге /usr/sap символическую ссылку на вашу папку /hana/shared с чем-то вроде этого
find /usr/sap -type l -exec stat {} + | grep /hana/shared
Это найдет любые символические ссылки на любую папку внутри /hana/shared
и покажет вам полный путь к символической ссылке и полный путь к ее цели в /hana/shared
.
Если вы можете использовать sed
, вы можете использовать регулярное выражение, чтобы извлечь необходимую часть из третьего столбца, оставив остальное нетронутым.
sed 's/{.*"jjj":"\([^"]*\).*$/\1/g' input.txt
, где мой файл input.txt
содержит:
abc1 abc2 {"abc3":{"jjj":"opt1"}}
xyz1 xyz2 {"xyz3":{"jjj":"opt2"}}
aaa1 aaa2 {"aaa3":{"aaa4:"jjkk"},.....{"jjj":"opt3"}}
Здесь я пытаюсь зафиксировать значение, представленное в двойных -кавычках после "jjj":"
и перед следующей закрывающей двойной -кавычкой.
$ awk '
{
print $1, $2, \
substr($0, 8+match($0, /\{"jjj":"[^"]+"/), RLENGTH-9)
}' input.txt
abc1 abc2 opt1
xyz1 xyz2 opt2
aaa1 aaa2 opt3
Предположим, что три поля файла разделены табуляцией -:
$ cut -f 3 file | jq -r '.request.jjj' | paste <( cut -f -2 file ) -
abc1 abc2 opt1
xyz1 xyz2 opt2
ghi1 ghi2 opt3
Это извлекает структуры JSON в третьем поле каждой строки и передает их в jq
для извлечения значения ключа .request.jjj
в каждой. Затем эти данные вставляются обратно в третий столбец с помощью paste
.
Если данные разделены символами одиночного пробела:
$ cut -d ' ' -f 3- file | jq -r '.request.jjj' | paste -d ' ' <( cut -d ' ' -f -2 file ) -
abc1 abc2 opt1
xyz1 xyz2 opt2
ghi1 ghi2 opt3
Обратите внимание, что первый cut
, который извлекает структуры JSON, должен использовать -f 3-
, а не просто -f 3
, чтобы убедиться, что никакие встроенные символы пробела не обрезают данные.
Поскольку ваше третье поле выглядит как действительный JSON,вы могли бы рассмотреть что-то подобное сjq
:
$ awk -v cmd='jq -r ".. |.jjj? // empty"' '
{printf "%s%s%s%s",$1,OFS,$2,OFS; print $3 | cmd; close(cmd)}
' file
abc1 abc2 opt1
xyz1 xyz2 opt2
ghi1 ghi2 opt3