awk решение:
awk 'FILENAME == ARGV[1] && NR>1{ df2[$2,$3,$4] }
FILENAME == ARGV[2] && FNR>1{ df3[$2,$3,$4] }
FILENAME == ARGV[3]{ if(FNR == 1) { printf("%s\t%s\t%s\n",$0,$NF,$NF) }
else { printf("%s\t%s\t%s\n",$0, (($2,$3,$4) in df2)? $NF :"NA",(($2,$3,$4) in df3)? $NF :"NA")}
}' df2 df3 df1 | column -t
Вывод:
chr start end Id Id Id
chr1 1 400 SN_1 NA NA
chr1 401 800 SN_2 SN_2 NA
chr1 801 1200 SN_3 SN_3 NA
chr1 1201 1600 SN_4 SN_4 SN_4
chr1 1601 2000 SN_5 NA SN_5
chr1 2001 2400 SN_6 NA SN_6
chr1 2401 2800 SN_7 NA NA
df2
, df3
и df1
ваши 2-й, 3-й и 1-й файлы dataframe соответственно
FILENAME
- встроенная переменная, указывающая на имя обрабатываемого в данный момент файла
ARGV
- встроенная переменная, указывающая на все аргументы перешел на awk-скрипт. т. е. ARGV[1]
содержит df2
FILENAME == ARGV[1] && NR>1
— встречается с 1-м файлом (т.е.df2
), начиная со 2-й строки
df2[$2,$3,$4]
— получение важных значений из «Dataframe 2» в качестве ключа массива df2
FILENAME == ARGV[2] && FNR>1
— обнаружение второго файла (то есть df3
), начиная со второй строки
df3[$2,$3,$4]
- получение важных значений из "Dataframe 3" в качестве ключа массива df3
FILENAME == ARGV[3]
- обнаружение 3-го файла (т.е. df1
), основной Dataframe
Согласно тому, что я прочитал на вашем скриншоте, у вас есть несколько правил iptables, и последнее отбрасывает все остальные
iptables -A input -j DROP
Перед тем, как отбросить остальную часть запроса, вы следует добавить правило, разрешающее ssh на вашем сервере
iptables -A input -p 22 -j ACCEPT