Какая команда LINUX использоваться для 'сокращения и заменяют столбец' задача?

http://paste.ubuntu.com/24184546/

Это - файл. Здесь, я должен заменить 6-й столбец числами от 1 до 158 соответственно.

Вывод должен быть похожим, http://paste.ubuntu.com/24184581/

Как я делаю это, с помощью команд Linux?Заранее спасибо.

2
задан 15 March 2017 в 23:05

1 ответ

То, что Вы запрашиваете, в основном увеличивает счетчик каждый раз, когда столбец 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
2
ответ дан 2 December 2019 в 03:41

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

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