awk '/@<TRIPOS>BOND/,/@/ {getline; if ($_ ~ /^@/) {printf "%s:%s\n",$_,FILENAME; system ("mv \""FILENAME"\" <bad_files>/$(basename \""FILENAME"\")")} exit}' <file_name>
Пояснение
/@<TRIPOS>BOND/,/@/ Нам нужен только блок между @<TRIPOS>BOND и следующая строка, начиная с @ getline Прочитать следующую строку после @<TRIPOS>BOND if ($_ ~ /^@/) Проверить, если строка начинается с @ true Печать сообщенияprintf "%s:%s\n",$_,FILENAME
Переместить файл system ("mv \""FILENAME"\" <bad_files>/$(basename \""FILENAME"\")")
false Оставьте скрипт exit
Пояснение
$ cat foo
@<TRIPOS>ATOM
2 H18 65.2220 Du 1 RES1 0.0000
@<TRIPOS>BOND
@<TRIPOS>SUBSTRUCTURE
$ cat bar
@<TRIPOS>ATOM
2 H18 65.2220 Du 1 RES1 0.0000
@<TRIPOS>BOND
1 3 5 ar
@<TRIPOS>SUBSTRUCTURE
$ awk '/@<TRIPOS>BOND/,/@/ {getline; if ($_ ~ /^@/) {printf "%s:%s\n",$_,FILENAME; system ("mv \""FILENAME"\" \""FILENAME"\"_moved")} exit}' foo
@<TRIPOS>SUBSTRUCTURE:foo
$ awk '/@<TRIPOS>BOND/,/@/ {getline; if ($_ ~ /^@/) {printf "%s:%s\n",$_,FILENAME; system ("mv \""FILENAME"\" \""FILENAME"\"_moved")} exit}' bar
$ cat foo_moved
@<TRIPOS>ATOM
2 H18 65.2220 Du 1 RES1 0.0000
@<TRIPOS>BOND
@<TRIPOS>SUBSTRUCTURE
$ cat bar_moved
cat: bar_moved: No such file or directory