Если я хочу использовать join
на моей Ubuntu, мне нужно сначала отсортировать оба файла лексически (по join --help
), и только затем присоединиться к ним:Bash: соединим числового столбца
tail -n +2 meta/201508_1 | sort -k 1b,1 > meta.txt
tail -n +2 keywords/copy | sort -k 1b,1 > keywords.txt
join meta.txt keywords.txt -1 1 -2 1 -t $'\t'
(я также удалить заголовок из обоих из них с использованием tail
)
Но вместо того, чтобы сортировать файлы лексикографически, я бы хотел их отсортировать по цифрам: первый столбец в обоих файлах - это идентификатор.
tail -n +2 meta/201508_1 | sort -k1 -n > meta.txt
tail -n +2 keywords/copy.txt | sort -k1 -n > keywords.txt
И затем присоединиться. Но для join
эти файлы выглядят несортированный:
join: meta.txt:10: is not sorted: 1023 301000 en
join: keywords.txt:2: is not sorted: 10 keyword1
Если добавить к --nocheck-order
join
, он не присоединяется правильно - она выводит только одну строку.
Как подключить два файла к их числовому идентификатору в bash?
Sample (столбцы разделенные табуляцией):
файл 1
id volume lang
1 10 en
2 20 en
5 30 en
6 40 en
10 50 en
файл 2
id keyword
4 kw1
2 kw2
10 kw3
1 kw4
3 kw5
требуемый выход
1 kw4 10 en
2 kw2 20 en
10 kw3 50 en
Укажите исходные данные ввода и ожидаемый результат. – anubhava
Я добавил два примера ввода и желаемый результат –
Как насчет сортировки входных файлов лексикографически, а затем их присоединения, как в первом примере, но затем вывести ** вывод ** в 'sort -n', чтобы получить числовой порядок ключей? –