Я отправил что-то подобное только что, и я думал, предоставленный код мог помочь в решении моей проблемы, однако к сожалению, я не могу скорректировать его к своим потребностям: awk - сравнивают файлы и печатают строки из обоих файлов
Так, у меня есть снова 2 разделенных от вкладки файла.
file_1.txt
apple 2.5 5 7.2
great 3.8 10 3.6
see 7.6 3 4.9
tree 5.4 11 5
back 8.9 2 2.1
file_2.txt
apple :::N
back :::ADJ
back :::N
around :::ADV
great :::ADJ
bee :::N
see :::V
tree :::N
Вывод должен быть похожим:
apple :::N 2.5 5 7.2
great :::ADJ 3.8 10 3.6
back :::ADJ 8.9 2 2.1
back :::N 8.9 2 2.1
see :::V 7.6 3 4.9
tree :::N 5.4 11 5
Различие к другому сообщению, что я точно так же, как, чтобы сравнить первые столбцы file_1.txt и file_2.txt и затем распечатать целую строку file_1.txt со столбцом 2 file_1.txt к outfile. Я не забочусь, в котором порядок 2$ file_2.txt печатается к outfile, таким образом, outfile мог также быть похожим
back 8.9 2 2.1 :::N
back 8.9 2 2.1 :::V etc.
Проблемой являются дубликаты в column1 как назад здесь. Иначе я мог, конечно, просто использовать paste
. Проблема с этой 'awk-командой, что она не читает column2 в массив и если я говорю ей печатать ее, это не возможно, конечно.
awk 'NR==FNR {a[$1]; next} $1 in a {print $0, a[$2]}' OFS='\t' file_2.txt file_1.txt > outfile.txt
Я с удовольствием ценю любую справку! Извините за глупость здесь также, кажется, что я полностью озадачен.
Если у Вас есть GNU awk
(доступный из репозитория через пакет gawk
), который поддерживает многомерные массивы, Вы могли сделать
gawk 'NR==FNR {a[$1][$2]++; next} $1 in a {for (x in a[$1]) print $0, x}' OFS="\t" file_2.txt file_1.txt
Напр.
$ gawk 'NR==FNR {a[$1][$2]++; next} $1 in a {for (x in a[$1]) print $0, x}' OFS="\t" file_2.txt file_1.txt
apple 2.5 5 7.2 :::N
great 3.8 10 3.6 :::ADJ
see 7.6 3 4.9 :::V
tree 5.4 11 5 :::N
back 8.9 2 2.1 :::ADJ
back 8.9 2 2.1 :::N
Иначе, если произведенный порядок не важен, самое легкое решение состоит в том, чтобы, вероятно, использовать join
команда вместо этого:
$ join -t $'\t' <(sort file_1.txt) <(sort file_2.txt)
apple 2.5 5 7.2 :::N
back 8.9 2 2.1 :::ADJ
back 8.9 2 2.1 :::N
great 3.8 10 3.6 :::ADJ
see 7.6 3 4.9 :::V
tree 5.4 11 5 :::N