Согласование строк, имеющих более одного места и их печати

У меня есть 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), он печатает все строки, которые имеют только одно пространство. Может ли кто-нибудь помочь мне, так как я не могу понять, в чем проблема?

1
задан 16 May 2018 в 06:01

4 ответа

Если я правильно понимаю, что-то вроде

grep -l ' ' */*/*.smi

будет печатать имена файлов «double space»

Если вы хотите нормализовать пробелы (' ' -> ' ' ]) вы можете попробовать

sed -ri.bak 's/\s{2,}/ /g' */*/*.smi

и удалить файлы резервных копий, если все прошло хорошо

rm /*/*.smi.bak
0
ответ дан 17 July 2018 в 14:11

Вы можете указать имена любых файлов .smi, в которых любая строка содержит два смежных пространства с

grep --include='*.smi' -rl ' ' .

. Если вы хотите сами выводить строки, удалите опцию l.

2
ответ дан 17 July 2018 в 14:11

Если я правильно понимаю, что-то вроде

grep -l ' ' */*/*.smi

будет печатать имена файлов «double space»

Если вы хотите нормализовать пробелы (' ' -> ' ' ]) вы можете попробовать

sed -ri.bak 's/\s{2,}/ /g' */*/*.smi

и удалить файлы резервных копий, если все прошло хорошо

rm /*/*.smi.bak
0
ответ дан 20 July 2018 в 14:15

Вы можете указать имена любых файлов .smi, в которых любая строка содержит два смежных пространства с

grep --include='*.smi' -rl ' ' .

. Если вы хотите сами выводить строки, удалите опцию l.

2
ответ дан 20 July 2018 в 14:15

Другие вопросы по тегам:

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