Вы хотите извлечь все строки из первого файла, первый столбец которых соответствует столбцу второго файла.
Так как первый файл содержит текст только в первом столбце (, а остальные числа ), мы могли бы просто использовать для этого grep
.
В bash
или любой другой оболочке, которая понимает подстановки процессов, это будет вопрос
grep -F -f <( awk -F, 'NR > 1 { print $1 }' <file2 ) file1 >newfile
В других оболочках вы должны сначала записать вывод команды awk
во временный файл, а затем использовать его с grep -f
.
awk
будет генерировать вывод, подобный
p10_1003_length_529_cov_12.940299
p10_1021_length_525_cov_6.801508
p10_1047_length_521_cov_4.852792
p10_1152_length_501_cov_22.430481
p10_139_length_1152_cov_892.463415
p10_149_length_1130_cov_7.540379
и grep
будут использовать их как шаблоны фиксированных строк для сопоставления с каждой строкой в вашем первом файле.
Вы могли бы сделать все это и в awk
, что включало бы сначала чтение в первом столбце второго файла как ключи в ассоциативном массиве, а затем проверку первого столбца первого файла по этим ключам :
awk -F, 'NR==FNR && FNR>1 { keys[sprintf("\"%s\"", $1)] }
NR!=FNR && FNR>1 && ($1 in keys)' file2 file1
Странное sprintf()
здесь потому, что первый столбец в file1
заключен в двойные кавычки. Он просто добавляет двойные кавычки к данным, считанным из file2
.
FNR>1
пропускает заголовки обоих файлов, в то время как NR==FNR
верно, если мы читаем из file2
.