У меня есть два текстовых файла разного размера. Первый из них под example1.txt содержит только один столбец чисел:
101
102
103
104
111
120
120
125
131
131
131
131
131
131
И второй текстовый файл example2.txt имеет два столбца:
101 3
102 3
103 3
104 4
104 4
111 5
120 1
120 1
125 2
126 2
127 2
128 2
129 2
130 2
130 2
130 2
131 10
131 10
131 10
131 10
131 10
131 10
132 10
Первый столбец в примере1 .txt - это подмножество первого столбца в example2.txt. Номера второго столбца в example2.txt - это связанные значения с первым столбцом.
Что я хочу сделать, это получить связанный второй столбец example1.txt, следующий за example2.txt. Я пытался, но пока не мог понять. Буду признателен за любые предложения или решения в bash, awk
Поэтому результат будет:
101 3
102 3
103 3
104 4
111 5
120 1
120 1
125 2
131 10
131 10
131 10
131 10
131 10
131 10
Использование этого awk хорошо сработало для двух вышеуказанных текстовых файлов.
awk 'NR==FNR{a[$1]++; next} ($1 in a) && b[$1]++ < a[$1]' example1.txt example2.txt
ПРОБЛЕМА, с которой я столкнулся
Теперь я работаю в большом файле, следуя тем же командам awk. И из этого результата номера строк, которые я получаю, меньше чем example1.txt. Я не смог отладить проблему. Я думаю, иногда, когда в столбце example1 отсутствует какая-либо строка, они пропускаются.
ПРЕДЛОЖЕНИЕ ОБ ОБНОВЛЕНИИ от Эда Мортона:
Я пишу здесь предложение от Эда Мортиона, чтобы проверить, какой вывод мы получаем. Следуя команде awk, awk 'NR==FNR{a[$1]++; next} ($1 in a){print $1, a[$1]}' b.txt a.txt > c.txt
Подсчитывает повторяющиеся общие числа в столбце 1 (из файла b.txt), а затем частота публикуется как столбец 2 из (a.txt) в выходном файле c. текст.
a.txt
101
102
103
104
111
120
120
125
131
131
131
131
131
131
b.txt:
101 3
102 3
103 3
104 4
104 4
111 5
120 1
120 1
125 2
126 2
127 2
128 2
129 2
130 2
130 2
130 2
131 10
131 10
131 10
131 10
131 10
131 10
132 10
c.txt:
101 1
102 1
103 1
104 2
111 1
120 2
120 2
125 1
131 6
131 6
131 6
131 6
131 6
131 6
Если мы не используем a[$1]++
, в приведенной выше команде awk мы получим outout c .txt:
awk 'NR==FNR{a[$1]; next} ($1 in a) && b[$1]++ < a[$1]' example1.txt example2.txt
101
102
103
104
111
120
120
125
131
131
131
131
131
131