«mktemp :слишком мало X в шаблоне», если в имени файла два набора X

Учитывая документ JSON, который вы показываете:

$ jq -r 'path(.[][][]) as $p | "\($p|join(":")):\(getpath($p).MeltingPoint):\(getpath($p).BoilingPoint)"' file.json
Metals:AlkaliMetals:Lithium:453:1615
Metals:AlkaliMetals:Sodium:371:1156
Metals:AlkalineEarthMetals:Beryllium:1560:2743
Metals:AlkalineEarthMetals:Magnesium:923:1363
Metalloids:Metaloids:Boron:2348:4273
Metalloids:Metaloids:Silicon:1687:3173

Это перебирает «пути» всех объектов на уровне 3 документа (, то есть пути к структурам Lithium, Sodiumи т. д. )как $p. Каждый $pпредставляет собой массив, подобный ["Metals","AlkaliMetals","Sodium"]. Он использует текущий путь для создания начальной части каждой выходной строки, соединяя путь с :в качестве разделителей. Фактические температуры кипения и плавления извлекаются с помощью getpath()из текущего пути, а значения добавляются в конец строки.

Похоже, это также работает с большим файлом, на который вы ссылаетесь, но выводит nullдля отсутствующих данных о температуре.

1
30.04.2019, 07:15
1 ответ

mktempзаменяет последний запуск крестиков в шаблоне:

The final run of ‘X’s in the template will be replaced by alpha-numeric character

Самый простой вариант — использовать

mktemp "/tmp/1556580619403-0/duplicate.$filename.XXXXXXX"

Если вам действительно нужно, чтобы оно заканчивалось исходным именем файла, используйте опцию --suffix:

mktemp /tmp/1556580619403-0/duplicate.XXXXXXX --suffix ".$filename"
6
27.01.2020, 23:15

Теги

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