как распечатать значение соответствия из одной строки, которая имеет несколько Delimiter?

Если бы в параллельном перемещении файлов были какие-то достоинства, велика вероятность, что mv уже делал бы это самостоятельно, либо существовал бы аналогичный инструмент. ;)

Нет смысла запускать mv параллельно на одном и том же исходном / целевом диске, поскольку обычно скорость носителя в любом случае ограничена. Если / usb_storage / - это USB-накопитель, это не заставит его работать быстрее.

mv /db/dbfile1 /db/dbfile2 /db/dbfile3 /usb_storage/

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

Кроме того, в случае, если / usb_storage / недостаточно велик для хранения всех файлов, на которые вы перемещаетесь, вместо трех неполных / без копий при параллельной работе вы можете получить хотя бы один полный файл с последовательным решением.

0
01.10.2018, 14:28
2 ответа

Как далеко это заведет вас?:

awk -vRS="]" '/rootVolume:false/ {for (i=1; i<=NF; i++) if ($i ~ /name|deviceName/) print $i}' file
name:/var/log/devops|40GB;/home/devops|150GB,
deviceName:/dev/sdb,

Он разбивает единственную строку в ], затем сканирует все поля, чтобы найти целевые, и распечатывает их. Вы можете прочитать результат в переменных оболочки следующим образом, затем:

read VARA VARB REST <<< $(awk -vRS="],*" -vORS=" " '/rootVolume:false/ {for (i=1; i<=NF; i++) if ($i ~ /name|deviceName/) print $i}' file)
echo $VARA
name:/var/log/devops|40GB;/home/devops|150GB,
echo $VARB
deviceName:/dev/sdb,
0
28.01.2020, 04:13

Вы можете использовать команду cutчто-то вроде:

cat /tmp/volume.log | cut -d, -f14 | tr -d "]["
rootVolume=false

make it a variable:
rootvolume=$(cat /tmp/volume.log | cut -d, -f14 | tr -d "][")

cat /tmp/volume.log | cut -d, -f3
deviceName:/dev/sda

cat /tmp/volume.log | cut -d, -f9
name:/var/log/devops|40GB;/home/devops|150GB

Или сgrep

cat /tmp/volume.log | grep -o "rootVolume:false]]," | tr "][,"

make it a variable:
rootvolume=$(cat /tmp/volume.log | grep -o "rootVolume:false]]," | tr "][,")

cat /tmp/volume.log | grep -o "deviceName:/dev/sda"

cat /tmp/volume.log | grep -o "name:/var/log/devops|40GB;/home/devops|150GB" | tr -d "\n"

-о,--только -соответствие Печатать только совпадающие (не -пустые )части совпадающей строки, причем каждая такая часть находится в отдельной строке вывода.

Используйте trпосле grep, чтобы удалить [],....etcиз вашего вывода.

0
28.01.2020, 04:13

Теги

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