#bash
#bash
Вопрос:
Я пытаюсь написать скрипт bash, который скопирует файл, извлекая определенные числа из файла и делая их заголовком. Исходный файл выглядит следующим образом:
#
# Rotational transition: j= **3**--> **8**
#
# Threshold energy **0.72598151E-01** eV
#
0.01000019 0.000000
0.03000057 0.000000
...
Я выделил жирным шрифтом функции, которые я хочу скопировать в качестве заголовка, чтобы выходной файл выглядел так:
3 8 0.72598151E-01
#
# Rotational transition: j= **3**--> **8**
#
# Threshold energy **0.72598151E-01** eV
#
0.01000019 0.000000
0.03000057 0.000000
...
Я хочу, чтобы этот скрипт скопировал кучу файлов, которые будут иметь тот же макет, что и выше, но с номерами, входящими в заголовок, разными для каждого файла. Мой скрипт для копирования файла далеко:
echo > newFile
while read -r line
do
echo $line >> newFile
done < originalFile
done
Большое спасибо за вашу помощь
Джеймс
Ответ №1:
Непроверенный, но вы поняли идею:
FIRST=$(head -n2 "$1" | grep 'Rotational transition' | sed 's/.*j=//; s/s//g; s/-->/ /')
SECOND=$(head -n4 "$1" | grep 'Threshold energy' | sed 's/.*energy //; s/ eV//')
echo "$FIRST $SECOND" > "$2"
cat "$1" >> "$2"
Комментарии:
1. Большое вам спасибо за вашу помощь, это кажется очень близким к решению. Я вижу, как строки внутри $((…)) извлекают правильную информацию из файла. Однако, когда я пытаюсь запустить этот код, я получаю сообщение об ошибке: «синтаксическая ошибка: недопустимый арифметический оператор (токен ошибки равен …) «, и в нем говорится, что токен ошибки — это то, что находится внутри $ ((…)) .
2. Глупый я, я, конечно
$(...)
$((...))
, не отредактировал ответ, теперь работает в моем тесте.3. Большое спасибо за вашу помощь