Если столбец соответствует другому файлу, вывести каждую строку с совпадением (awk / grep)

Решено

примеры работают при изменении строки

    $(ARCH) $(ARCHFLAGS) $@ $?

на

    $(ARCH) $(ARCHFLAGS) $@ $(addprefix NoOMP/,$?)

. Выше я исключил это решение, но мое испытание основано на $ ^ вместо $? . В то время как первый будет перестраивать весь архив из старого и нового файлов% .o, последний обновит только существующий архив новыми файлами% .o. При перестроении всего архива из старых и новых файлов% .o старые файлы% .o будут иметь неправильный префикс, а новые - правильные. Таким образом, исключение старых файлов% .o путем обновления архива вновь скомпилированными файлами% .o позволяет обойти эту проблему.

Приветствую

3
03.01.2017, 10:53
3 ответа

Ваш сценарий AWK почти готов:

awk -F'|' 'NR==FNR{c[$1]++;next};c[$1] > 0' file1 file2 > output.txt

работает, после изменения окончания строки с Mac на Unix:

tr '\r' '\n' < file1 > file1.new
mv file1.new file1
tr '\r' '\n' < file2 > file2.new
mv file2.new file2

$ 1 - это первое поле в AWK.

Вместо c [$ 1]> 0 вы можете написать c [$ 1] . > 0 не требуется: работает любое ненулевое значение, поэтому мы могли бы также напрямую использовать содержимое c :

awk -F'|' 'NR==FNR{c[$1]++;next};c[$1]' file1 file2 > output.txt
5
27.01.2020, 21:21

попробуйте эту команду awk.

bash-4.1$ cat file1
1
3

bash-4.1$ cat file2
1|A|B
1|C|D
2|E|F
3|G|H

bash-4.1$ awk -F\| 'NR==FNR{F1[$0];next}$1 in F1{print}' file1 file2
1|A|B
1|C|D
3|G|H
1
27.01.2020, 21:21

Вы уже пробовали присоединиться к ?

$ tail -n +1 -- file1 file2
==> file1 <==
AT1G56430
AT3G55190
AT3G22880

==> file2 <==
AT1G01010|GO:0043090|RCA
AT1G56430|GO:0010233|IGI 
AT1G56430|GO:0009555|IGI 
AT1G56430|GO:0030418|IGI

$ join -t'|' file1 file2
AT1G56430|GO:0010233|IGI 
AT1G56430|GO:0009555|IGI 
AT1G56430|GO:0030418|IGI
0
27.01.2020, 21:21

Теги

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