вывести соответствующий столбец из нескольких входов и объединить вывод - PullRequest
1 голос
/ 08 октября 2019

печать сопоставленного столбца из нескольких входов и объединение выходных данных

A.lst

1091 1991    43.5   -30.1   -11.4
1091 1993   -11.2   -28.5    -2.7
1091 1997    35.8   -13.2    -4.5
1091 2003   -26.8   -23.9     0.6
1091 2007    23.8    64.8     3.5
1091 2008   -45.8    70.7    -6.0
1100 1967    24.5   -25.6   -12.7
1100 1971  -935.0     9.3    52.0
1100 1972  -388.8    59.1    20.4
1100 1974    17.7    48.9     3.0

B.lst

1091 1991 295 1
1091 1993 293 3
1091 1997 296 7
1091 2003 287 13
1091 2007 283 17
1091 2008 282 18
1100 1967 1419 3
1100 1971 56 7
1031 2023 283 17
1021 2238 282 18
1140 1327 1419 3
1150 3971 56 7
1100 1972 55 8
1100 1974 1445 10

С помощью этой команды (из предыдущего, не могу вспомнить, откуда, я буду кредитовать их, как только я его нашел),

NR==FNR{ 
    a[$1,$2]=$1; next 
}
{ 
    s=SUBSEP
    k=$3 s $4
}k in a{ print $0 }

Но я понятия не имею, как объединить вывод, который он должен печатать, только совпадающий (определенный столбец $ 3 $ 4 из B.lst)

1091 1991    43.5   -30.1   -11.4 295 1
1091 1993   -11.2   -28.5    -2.7 293 3
1091 1997    35.8   -13.2    -4.5 296 7
1091 2003   -26.8   -23.9     0.6 287 13
1091 2007    23.8    64.8     3.5 283 17
1091 2008   -45.8    70.7    -6.0 282 18
1100 1967    24.5   -25.6   -12.7 1419 3
1100 1971  -935.0     9.3    52.0 56 7
1100 1972  -388.8    59.1    20.4 55 8
1100 1974    17.7    48.9     3.0 1445 10

1 Ответ

4 голосов
/ 08 октября 2019

Не могли бы вы попробовать следующее.

awk 'FNR==NR{array[$1,$2]=$3 OFS $4;next} (($1,$2) in array){print $0,array[$1,$2]}'  file_B file_A

Теперь добавьте форму не одного вкладыша вышеуказанного решения.

awk '
FNR==NR{
  array[$1,$2]=$3 OFS $4
  next
}
(($1,$2) in array){
  print $0,array[$1,$2]
}
'  file_B file_A

Объяснение: Добавление пояснения к приведенному выше коду.

awk '                        ##Starting awk program here.
FNR==NR{                     ##Checking condition FNR==NR which will be TRUE when file_B is being read.
  array[$1,$2]=$3 OFS $4     ##Creating an array named array whose index is $1,$2 and value is $3 OFS $4.
  next                       ##Using next will skip all further statements from here.
}                            ##Closing FNR==NR condition BLOCK here.
(($1,$2) in array){          ##Checking condition if $1,$2 is present in array then do following.
  print $0,array[$1,$2]      ##Printing current line and then value of array with index of $1,$2
}
'  file_B file_A             ##Mentioning Input_file names here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...