File1.txt
item1 carA
item2 carB
item3 carC
item4 platD
item5 carE
File2.txt
carA platA
carB platB
carC platC
carE platE
Требуемый выход:
item1 platA
item2 platB
item3 platC
item4 platD
item5 platE
Как мне это сделать?
command-line
text-processing
awk
pawana
источник
источник
Я знаю, что вы сказали
awk
, но для этого естьjoin
команда ...Для первой
join
команды было бы достаточно, если бы не эта строка:Команда в основном говорит: объединить на основе второго столбца первого файла (
-1 2
) и первого столбца второго файла (-2 1
) и вывести первый столбец первого файла и второй столбец второго файла (-o 1.1,2.2
). Это показывает только линии, которые сопряжены. Вторая команда соединения говорит почти то же самое, но она говорит, чтобы показать строки из первого файла, который не может быть спарен (-v 1
), и вывести первый столбец первого файла и второй столбец первого файла (-o 1.1,1.2
). Затем мы сортируем вывод обоих вместе.sort -k 1
означает сортировку по первому столбцу иsort -k 2
означает сортировку по второму. Перед сортировкой файлов важно отсортировать файлы по столбцу соединенияjoin
.Теперь я написал сортировку дважды, потому что я не люблю засорять свои каталоги файлами, если смогу помочь. Однако, как сказал Дэвид Фёрстер, в зависимости от размера файлов, вы можете отсортировать файлы и сохранить их в первую очередь, чтобы не ждать, пока они будут отсортированы дважды. Чтобы дать представление о размерах, вот время, необходимое для сортировки 1 миллиона и 10 миллионов строк на моем компьютере:
Это 1,5 секунды для 1 миллиона строк и 19 секунд для 10 миллионов строк.
источник
%E
в формате времени) менее интересно измерить производительность вычислений. Процессорное время пользовательского режима (%U
или просто неустановленнаяTIMEFORMAT
переменная) было бы гораздо более значимым.%U
.