#awk
#awk
Вопрос:
У меня большая проблема. Мне нужно написать программу, которая сравнивает строки между двумя файлами (File1, File2 и мы печатаем сумму повторений в другом файле Sum1, но есть несколько условий. Мы проверяем, что у нас есть в column2 ($ 2), наиболее важными являются повторы SOL, SOL может повторяться 2 раза, 3 раза или 4 раза:
- Для 2 одинаковых повторов SOL мы добавляем один
а) В File1 и в File2
DGD107 SOL5989
DGD107 SOL5989
мы добавляем 1 к сумме
б) В File1 и в File2
DGD167 SOL5989
DGD1071 SOL5989
мы добавляем 1 к сумме
- Для 3 одинаковых повторений SOL мы добавляем 2 (у нас есть 3 разных типа 3-кратных повторений) «
а) В File1 и в File2
DGD67 SOL3641
DGD1911 SOL3641
DGD123 SOL3641
мы добавляем к сумме 2
б) В File1 и в File2
DGD87 SOL1234
DGD5019 SOL1234
DGD5019 SOL1234
мы добавляем к сумме 2
c) В File1 и в File2
DGD429 SOL619
DGD429 SOL619
DGD429 SOL619
мы добавляем к сумме 2
- Для 4 одинаковых повторений SOL мы также добавляем 2 (у нас есть 5 разных типов 4-кратных повторений)
а) В File1 и в File2
DGD5 SOL2848
DGD5 SOL2848
DGD5 SOL2848
DGD59 SOL2848
мы добавляем к сумме 2
б) В File1 и в File2
DGD99 SOL4509
DGD99 SOL4509
DGD99 SOL4509
DGD99 SOL4509
мы добавляем к сумме 2
c) В File1 и в File2
DGD7 SOL601
DGD34 SOL601
DGD34 SOL601
DGD63 SOL601
мы добавляем к сумме 2
d) В File1 и в File2
DGD74 SOL130
DGD78 SOL130
DGD18 SOL130
DGD72 SOL130
we add to sum 2
e) In File1 and in File2
DGD7 SOL172
DGD34 SOL172
DGD34 SOL172
DGD7 SOL172
мы добавляем к сумме 2
Хорошо, итак, это пример кода (я добавляю пробелы, чтобы помочь вам увидеть это)
Файл1
DGD5 SOL2848
DGD5 SOL2848
DGD5 SOL2848
DGD59 SOL2848
DGD87 SOL1234
DGD5019 SOL1234
DGD5019 SOL1234
DGD5 SOL5989
DGD5 SOL5989
DGD87 SOL1234
DGD5019 SOL1234
DGD5019 SOL1234
DGD74 SOL130
DGD78 SOL130
DGD18 SOL130
DGD72 SOL130
Файл2
DGD72 SOL782
DGD5 SOL2848
DGD5 SOL2848
DGD72 SOL782
DGD87 SOL1234
DGD5019 SOL1234
DGD5019 SOL1234
DGD107 SOL5989
DGD107 SOL5989
DGD52 SOL571
DGD22 SOL571
DGD5019 SOL1234
DGD5019 SOL1234
DGD74 SOL130
DGD78 SOL130
DGD18 SOL130
DGD72 SOL130
Сумма должна быть равна 6 (я дал вам 5 примеров повторений: 1-й 1; 2-й 2; 3-й 0; 4-й 1; 5-й 2).
Я знаю, что это очень сложная задача, но любой совет был бы полезен.
Комментарии:
1. У вас будет больше шансов получить ответ, если вы разместите 1 вопрос с 1 образцом набора входных / выходных данных. Затем вы можете попытаться применить это решение к другим своим проблемам и задать дополнительный вопрос, если не можете в этом разобраться.
2. @EdMorton ты прав. Я попытаюсь разделить свою проблему.
Ответ №1:
Это выведет 6
для данного образца ввода:
awk '
NF < 2 {next}
NR==FNR {
c1[$2] = c1[$2]<3
next
}
c1[$2]-->0 amp;amp; c2[$2] { sum}
END {print sum 0}
' file[12]
Кажется, что условие 3. (добавление 2 к сумме для 4 повторений) уже выполнено, когда подсчитано 2. (3 повторения). Процесс заключается в следующем: увеличьте сумму, если $ 2 появляется дважды в обоих файлах; и увеличьте сумму еще раз, если $ 2 появляется более чем в два раза в обоих файлах.