Гибернация не работает на MacBook Pro с Debian

Вот один способ:

$ awk -F"[, ]" 'NR==FNR{a[$1]=$1","$2; next} ($2 in a){print a[$2]","$1}' file1 file2 
1000,Brian,3044
400,Nick,4466
1010,Jason,1206

-F "[,]" устанавливает разделитель полей на пробел или запятую. FNR - номер текущей строки, а NR - номер текущей строки текущего файла. Эти два будут равны только при чтении 1-го файла. Следовательно, NR == FNR {a [$ 1] = $ 1 "," $ 2; next} будет выполняться только в строках первого файла и сохранит 1-е и 2-е поля (с запятой между ними) как значения в массиве a , ключи которого являются 1-м полями. Затем, когда 2-й файл читается, если 2-е поле находится в a , мы печатаем связанное с ним значение (1-е и 2-е поля первого файла) и 1-е поле второго файла. .


Тем не менее, для этого есть приложение! Именно для этого и было создано join .К сожалению, поскольку ваши два файла не отсортированы и имеют разные разделители, нам понадобятся некоторые хитрости. Если ваша оболочка поддерживает <() , вы можете сделать:

$ join -t, -1 1 -2 2 <(sort file1) <(sed 's/ /,/g' file2 | sort -t"," -k2) 
1000,Brian,3044
1010,Jason,1206
400,Nick,4466

join -t, -1 1 -2 2 означает использование , в качестве разделителя и присоединитесь к 1-му полю файла file1 и второму полю file2. sed просто заменяет пробелы запятыми, поэтому в обоих файлах используется один и тот же разделитель. Сортировка делает то, что написано на бутылке: сортирует ввод.

3
10.10.2015, 15:41
0 ответов

Теги

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