Вставка нового столбца с конкретными строками хранения символа особой длины

Я должен вставить столбец после четвертого столбца с символом 'A'.

Каждая строка должна иметь точно 80 символов (включая пробелы) перед новой строкой; если не мы можем добавить пробелы для компенсации. Я должен сделать это для большого количества файлов.

Представление в качестве примера единственного файла:

Прежде:

ATOM    558  O   VAL    86     -12.863  -8.701 -49.495  1.00 64.57           O
ATOM    560  CA  VAL    87     -13.628 -10.486 -47.550  1.00 58.11           C 
.....
.....
.....

После:

ATOM    558  O   VAL A  86     -12.863  -8.701 -49.495  1.00 64.57           O  
ATOM    560  CA  VAL A  87     -13.628 -10.486 -47.550  1.00 58.11           C  
.......
.......
2
задан 19 August 2017 в 12:31

2 ответа

Возможно, можно ли просто заменить одно пространство в столбце 5?

$ sed 's/  / A/5' file
ATOM    558  O   VAL A  86     -12.863  -8.701 -49.495  1.00 64.57           O
ATOM    560  CA  VAL A  87     -13.628 -10.486 -47.550  1.00 58.11           C

Можно передать несколько имен файлов sed, просто используйте шарик оболочки как *.txt или независимо от того, что поймает файлы, Вы хотите отредактировать.

Используйте -i флаг после тестирования для изменения файлов.

Это не изменит символы на строку... Если необходимо заполнить строки к 80 символам, можно использовать что-то как

sed 's/  / A/5' file | awk '{printf "%-80s\n", $0}' 
4
ответ дан 2 December 2019 в 01:43

Используя perl:

perl  -lane '$"="\t"; print sprintf("%-80s", "@F[0..3]\tA\t@F[4..10]");' file

Вывод:

ATOM    558     O       VAL     A       86      -12.863 -8.701  -49.495 1.00    64.57   O                         
ATOM    560     CA      VAL     A       87      -13.628 -10.486 -47.550 1.00    58.11   C

Чтобы проверить, что длина равняется точно "80", передайте вывод awk '{ print length($0), "->", $0 }':

$ perl ... | awk '{ print length($0), "->", $0 }'
80 -> ATOM      558     O       VAL     A       86      -12.863 -8.701  -49.495 1.00    64.57   O                         
80 -> ATOM      560     CA      VAL     A       87      -13.628 -10.486 -47.550 1.00    58.11   C 
2
ответ дан 2 December 2019 в 01:43

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

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