Я задам свой вопрос с примером. У меня есть 2 файла:
Файл № 1:
118D FC300_R5_TP FX.B 32775 2112 6 2038 6 2112 0
118E FC300_R5_TP FX.B 32775 2136 7 2065 6 2136 0
118F FC300_R5_TP FX.B 32775 2124 6 2064 6 2124 0
1190 FC300_R5_TP FX.B 819210 814632 99 814609 99 814632 0
1191 FC300_R5_TP FX.B 819210 104100 13 103714 13 104100 0
1192 FC300_R5_TP FX.B 1638420 1609476 98 1609402 98 1609476 0
1196 FC300_R5_TP FX.B 1638420 1638432 100 1638379 100 1638432 0
119A FC300_R5_TP FX.B 3276840 3271776 100 3271698 100 3271776 0
119E FC300_R5_TP FX.B 3276840 3264120 100 3264034 100 3264120 0
11A2 FC300_R5_TP FX.B 3276840 2328648 71 2328546 71 2328648 0
11A6 FC300_R5_TP FX.B 3276840 2328444 71 2328355 71 2328444 0
11AA FC300_R5_TP FX.B 3276840 2328528 71 2328403 71 2328528 0
11AE FC300_R5_TP FX.B 3276840 2328648 71 2328468 71 2328648 0
11B2 FC300_R5_TP FX.B 3276840 2130000 65 2129766 65 2130000 0
173A FC300_R5_TP FX.B 6553680 6478572 99 6477747 99 6478572 0
Файл № 2:
11AA FC300_R5_TP FX.B 3276840 2328528 71 2328403 71 2328528 0
11AE FC300_R5_TP FX.B 3276840 2328648 71 2328468 71 2328648 0
11B2 FC300_R5_TP FX.B 3276840 2130000 65 2129766 65 2130000 0
173A FC300_R5_TP FX.B 6553680 6478572 99 6477747 99 6478572 0
0BDB FC600_R5_TP FX.B 33554640 6044364 18 6033105 18 6044364 0
0BDC FC600_R5_TP FX.B 33554640 6613536 20 6481974 19 6613536 0
0BDD FC600_R5_TP FX.B 33554640 4435848 13 4057170 12 4435848 0
0BDE FC600_R5_TP FX.B 33554640 6620868 20 6249518 19 6620868 0
Желаемый вывод
Файл № 3:
0BDB FC600_R5_TP FX.B 33554640 6044364 18 6033105 18 6044364 0
0BDC FC600_R5_TP FX.B 33554640 6613536 20 6481974 19 6613536 0
0BDD FC600_R5_TP FX.B 33554640 4435848 13 4057170 12 4435848 0
0BDE FC600_R5_TP FX.B 33554640 6620868 20 6249518 19 6620868 0
Я хотел бы сравнить файл 1 и файл 2, используя их первые столбцы, и удалить всю строку или строку из файла 2, где они совпадают в файле 1. Я также хотел бы сохранить результаты в третий файл, файл # 3.
источник
Будет сообщать строки, которые только в
f2
.Сообщать ли линии
f2
которых первое поле не найдено в качестве первого поля в любой строкеf1
.(вам нужна оболочка с поддержкой подстановки процессов, например
ksh93
,zsh
илиbash
).источник
Просто для удовольствия вот решение в Perl:
пример
подробности
Решение Perl выше состоит из 2 циклов. Первый цикл читает все строки из from
file1
и создает хеш,%names
куда добавляется каждый идентифицируемый нами столбец.Затем второй
while
цикл выполняется над вторым файлом,file2
и столбец 1 каждой строки идентифицируется с помощью регулярного выражения:Выше сказано с начала строки, сопоставьте все, что не является пробелом, и сохраните его во временной переменной
$1
. Это спасает, оборачивая вокруг себя парень..*
Говорит , что нужно все остальное на линии.Следующий бит , что линии говорит смотреть вверх немного столбец 1 , который мы только что сохраненный в
$1
в%names
хэш:Если он присутствует там, то мы не хотим его печатать. Если его там нет, распечатайте его.
источник
Метод 1 # Баш
Метод 2 # Только Grep
grep работает, но не гарантия
источник
Давайте получим это как
Файл № 1: file1.txt
Файл № 2: file2.txt
Затем запустите следующую на терминале
output.txt будет содержать желаемые результаты.
Объяснение:
источник