Как мне извлечь значения из файла, используя shell-скрипт (например, grep
, awk
или sed
). У меня есть следующая структура (описанная ниже), и я хочу получить выходной файл только со вторым столбцом файла. Я попытался с помощью grep: grep -oP '\s*U238\s*\*\s+[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?' file >U238_out
, чтобы извлечь все значения U238 из всего файла и сохранить его в выходном файле (U238_out). При этом я получаю следующий вывод:
U238 * 1.779265E+03
U238 * 5.418484E-03
U238 * 1.777156E+03
...
Но я хочу получить эту структуру:
1.779265E+03
5.418484E-03
1.777156E+03
Файловая структура:
PERIODICITY : 0
SYMMETRY : 0
MATERIAL MFUEL
MEDIUM MFUEL VOLUME 8.308106E+05
*******************************************************
* ISOTOPE * MASS (KG) * CIP * EQFMASS *
*******************************************************
* U238 * 1.779265E+03 * 28.125 * 0.000000E+00 *
Заранее спасибо.
2 ответа
Вы имеете в виду что-то вроде этого?
sed '/\s*\*/!d;s/\s*[*][^*]*[*]\s*\([-+.E0-9]*\).*/\1/;/^$/d' file.txt
объяснение
/\s*\*/!d # delete line not started with [blank]*
; # separator for next sed command
s/ # substitute
\s* # ignore leading blanks
[*] # search first *
[^*]*[*] # ignore everything until the next *
\s* # ignore blanks
\([-+.E0-9]*\) # save number into arg1 (\1)
.* # ignore rest of line
/\1/ # print only arg1
; # separator for next sed command
/^$/d # ignore empty lines (first 3)
вывод
3.099319E+02
1.274088E+01
1.779265E+03
3.789596E+02
1.760032E+02
5.049642E+01
5.002164E+01
4.777184E+00
2.594883E-19
2.594883E-19
Ты можешь использовать:
awk '$2=="U238" {print $4}' file > U238_out
Или
awk '$2~/^U238$/ {print $4} file > U238_out
Если U238 во 2-м поле, выведите 4-е поле:
1.779265E+03
Новые вопросы
shell
Термин «оболочка» относится к общему классу текстовых интерактивных командных интерпретаторов, чаще всего связанных с операционными системами Unix и Linux. Для вопросов о сценариях оболочки, пожалуйста, используйте более конкретные теги, такие как 'bash', 'powershell' или 'ksh'. Без конкретного тега следует предполагать переносимое (POSIX-совместимое) решение, хотя вместо него предпочтительнее использовать «posix» или «sh».