http://paste.ubuntu.com/24184546/
Это - файл. Здесь, я должен заменить 6-й столбец числами от 1 до 158 соответственно.
Вывод должен быть похожим, http://paste.ubuntu.com/24184581/
Как я делаю это, с помощью команд Linux?Заранее спасибо.
То, что Вы запрашиваете, в основном увеличивает счетчик каждый раз, когда столбец 4 изменяется. awk
команда ниже делает точно это.
$ awk '$4 != last{count++};{$6=count;last=$4};1' input.txt
ATOM 1149 N MET B 1 56.923 131.264 45.113 1.00140.13 N
ATOM 1150 CA MET B 1 58.169 131.437 44.333 1.00140.13 C
ATOM 1151 C MET B 1 58.225 130.444 43.220 1.00140.13 C
ATOM 1152 O MET B 1 58.569 130.785 42.089 1.00140.13 O
ATOM 1153 CB MET B 1 59.401 131.239 45.231 1.00140.13 C
ATOM 1154 CG MET B 1 59.536 129.826 45.799 1.00140.13 C
ATOM 1155 SD MET B 1 58.315 129.397 47.077 1.00140.13 S
ATOM 1156 CE MET B 1 59.098 130.370 48.397 1.00140.13 C
ATOM 1157 N SER B 2 57.860 129.183 43.517 1.00 86.33 N
ATOM 1158 CA SER B 2 57.898 128.164 42.517 1.00 86.33 C
ATOM 1159 C SER B 2 56.887 128.522 41.486 1.00 86.33 C
ATOM 1160 O SER B 2 55.901 129.195 41.780 1.00 86.33 O
ATOM 1161 CB SER B 2 57.559 126.761 43.047 1.00 86.33 C
ATOM 1162 OG SER B 2 56.212 126.721 43.495 1.00 86.33 O
ATOM 1163 N ALA B 3 57.122 128.084 40.237 1.00 45.56 N
ATOM 1164 CA ALA B 3 56.217 128.412 39.183 1.00 45.56 C
ATOM 1165 C ALA B 3 55.730 127.143 38.568 1.00 45.56 C
ATOM 1166 O ALA B 3 56.393 126.109 38.624 1.00 45.56 O
ATOM 1167 CB ALA B 3 56.865 129.235 38.059 1.00 45.56 C
Каждая команда awk может быть структурирована таким образом:
awk '/Condition/ {code block to run on condition};'
Если условие отсутствует, выполнения блока кода для какой-либо строки, независимо от ее содержания. В этом примере мы проверяем ли $4
поле (столбец) изменилось ( $4 != last
, чтения как поле 4 не равняются переменной last
). Если условие верно (который будет каждым разом, когда оно изменяется и на первой строке, когда в последний раз еще не установлен), мы увеличиваем count
переменная.
Следующий блок кода {$6=count;last=$4}
будет работать, независимо от какой строки мы идем. Мы просто присваиваем содержание count
переменная к полю 6, и записывает то, что мы видели в поле 4. count
переменная появится, после того как сценарий встречается с первой строкой текста и будет создан, когда команда оценивает $4 != last
часть. last
, с другой стороны, придет к существованию, когда код оценит {$6=count;last=$4}
часть.
Наконец 1
в конце просто прием для создания условия всегда оценить к "истинному" и печати. Просто стенография вместо {print}
блок.
Для сохранения результата в файл использовать >
оператор оболочки для перенаправления вывода в оболочке. Например,
awk '$4 != last{count++};{$6=count;last=$4};1' input.txt > output.txt