У меня есть 23 папки, и каждая папка имеет две подпапки (всегда одно и то же имя), и каждая подпапка имеет ровно два файла (одно и то же имя). Таким образом, это выглядит так:
Folder1/BindingDB/chiral.smi
nochiral.smi
Folder1/Xray/chiral.smi
nochiral.smi
Folder2/BindingDB/chiral.smi
nochiral.smi
Folder2/Xray/chiral.smi
nochiral.smi
Например, файл chiral.smi выглядит так:
COCCNC(=O)[C@H]1[C@@H]([C@H]2CN3C(=O)C=CC=C3[C@@H]1N2C4=NC(=C(S4)C5=CC=CC=C5)C6=CC=C(C=C6)Cl)CO K00000004
C1[C@H]2[C@H](C=C([C@H]3[C@@H]2[C@H]4[C@@H]1[C@@H]([C@H]4C=C3)CC/C=C/CC5=CC=C(C=C5)O)C(=O)O)O K00000005
C[C@]12CCC[C@@]([C@@H]1CC[C@@]34[C@H]2C[C@H]5[C@@H](C3)[C@]5(C4)CO)(C)C(=O)O K00000006
Итак, последние две строки K00000005 и K00000006 имеют двойное пространство, и я хочу совместить эти две строки.
Я пытаюсь дважды проверить все файлы chiral.smi и nochiral.smi в моих папках, если у них есть строки с двойным пространством (у меня должен быть только один пробел в каждой строке каждого файла).
Я попытался в bash что-то вроде этого:
for i in */*/*.smi ; do sed -e "s/\s\{2,\}/ /g" $i; done, но он не работает. Кроме того, когда я запускаю sed -e "s/\s\{3,\}/ /g" *smi в подпапке (BindingDB или Xray), он печатает все строки, которые имеют только одно пространство. Может ли кто-нибудь помочь мне, так как я не могу понять, в чем проблема?
Если я правильно понимаю, что-то вроде
grep -l ' ' */*/*.smi
будет печатать имена файлов «double space»
Если вы хотите нормализовать пробелы (' ' -> ' ' ]) вы можете попробовать
sed -ri.bak 's/\s{2,}/ /g' */*/*.smi
и удалить файлы резервных копий, если все прошло хорошо
rm /*/*.smi.bak
Вы можете указать имена любых файлов .smi, в которых любая строка содержит два смежных пространства с
grep --include='*.smi' -rl ' ' .
. Если вы хотите сами выводить строки, удалите опцию l.
Если я правильно понимаю, что-то вроде
grep -l ' ' */*/*.smi
будет печатать имена файлов «double space»
Если вы хотите нормализовать пробелы (' ' -> ' ' ]) вы можете попробовать
sed -ri.bak 's/\s{2,}/ /g' */*/*.smi
и удалить файлы резервных копий, если все прошло хорошо
rm /*/*.smi.bak
Вы можете указать имена любых файлов .smi, в которых любая строка содержит два смежных пространства с
grep --include='*.smi' -rl ' ' .
. Если вы хотите сами выводить строки, удалите опцию l.