печатать определенные столбцы из соответствующей переменной bash - PullRequest
1 голос
/ 08 марта 2019

У меня есть текстовый файл (txtfile1), который содержит такую ​​информацию, как ID, var1, var2 и var3:

 T01012 20 30 40
 T01025 21 22 22
 T01000 90 94 20
 ...

У меня также есть другой текстовый файл (txtfile2), который содержит отдельную информацию и будет содержать те же идентификаторы, что и в txtfile1:

 P02013 -999 -999 -999 -999 -999
 S01381 -999 10 -999 -999 11
 T01012 -999 -999 -999 23 12
 ...

Зацикливаясь на идентификаторах, которые находятся в txtfile2, я хочу извлечь 1-й, 2-й и 3-й столбцы в txtfile1. Я пробовал различные команды awk и sed безрезультатно, и мне не хватает чего-то простого. Любая помощь будет оценена. Желаемый результат из предоставленного примера будет:

 T1012 20 30

который в конечном итоге записывает в текстовый файл.

Ответы [ 2 ]

1 голос
/ 08 марта 2019

если сортировка нежелательна

$ awk 'NR==FNR{a[$1]=$0; next} $1 in a{print a[$1]}' file1 file2

если вы хотите удалить последнее поле (40 в выбранной записи)

$ awk 'NR==FNR{$NF=""; a[$1]=$0; next} $1 in a{print a[$1]}' file1 file2

или

$ awk 'NR==FNR{a[$1]=$2 FS $3; next} $1 in a{print $1,a[$1]}' file1 file2
1 голос
/ 08 марта 2019

Вы можете использовать join:

join -j1 -o1.1,2.2,2.3 <(sort txtfile2) <(sort txtfile1)
  • -j указывает, к какому столбцу нужно присоединить файлы
  • -o перечисляет поля для вывода

join необходимо отсортировать входные файлы, поэтому подстановка процесса используется для их передачи в команду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...