Мне нужно вставить столбец после четвертого столбца с символом «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
.......
.......
Использование 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
Возможно, вы можете просто заменить одно пространство в столбце 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, просто используйте оболочку glob, например *.txt, или что-нибудь, что поймает файлы, которые вы
Используйте флаг -i после тестирования, чтобы изменить файлы.
Это не изменит символы в строке ... Если вам нужно проложить строки до 80 символов, вы можете использовать что-то вроде
sed 's/ / A/5' file | awk '{printf "%-80s\n", $0}'
Использование 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
Возможно, вы можете просто заменить одно пространство в столбце 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, просто используйте оболочку glob, например *.txt, или что-нибудь, что поймает файлы, которые вы
Используйте флаг -i после тестирования, чтобы изменить файлы.
Это не изменит символы в строке ... Если вам нужно проложить строки до 80 символов, вы можете использовать что-то вроде
sed 's/ / A/5' file | awk '{printf "%-80s\n", $0}'