Заменить две колонки linux - PullRequest
0 голосов
/ 04 июня 2018

Я хочу заменить второй столбец моего первого файла

файл 1:

2       rs58086319      0       983550  T       C
2       rs56809628      0       983571  T       C
2       rs7608441       0       983572  A       G
2       rs114910509     0       983579  A       G
2       var_chr2_983614 0       983614  T       C
2       var_chr2_983624 0       983624  A       G
2       rs115188027     0       983632  A       C
2       var_chr2_983636 0       983636  T       C
2       var_chr2_983650 0       983650  A       G
2       var_chr2_983660 0       983660  T       C

первым столбцом моего второго файла

файл 2:

2_983550_T_C
2_983571_T_C
2_983572_A_G
2_983579_A_G
2_983614_T_C
2_983624_A_G
2_983632_A_C
2_983636_T_C
2_983650_A_G
2_983660_T_C

Я пытался присоединиться и awk, но почему-то это не работает.Я подозреваю, что в моем втором файле есть '_'.

Спасибо

Ответы [ 4 ]

0 голосов
/ 04 июня 2018

Я бы пошел с paste и awk, например:

paste file1 file2 | awk '{ $2 = $NF } NF--' OFS='\t'

Вывод:

2   2_983550_T_C    0   983550  T   C
2   2_983571_T_C    0   983571  T   C
2   2_983572_A_G    0   983572  A   G
2   2_983579_A_G    0   983579  A   G
2   2_983614_T_C    0   983614  T   C
2   2_983624_A_G    0   983624  A   G
2   2_983632_A_C    0   983632  A   C
2   2_983636_T_C    0   983636  T   C
2   2_983650_A_G    0   983650  A   G
2   2_983660_T_C    0   983660  T   C
0 голосов
/ 04 июня 2018

РЕДАКТИРОВАТЬ: В случае, если вы хотите сделать _ в качестве разделителя полей в Input_file2, вам может помочь следующее.

awk 'FNR==NR{a[FNR]=$1;next} (FNR in a){$2=a[FNR]} 1' FS="_" file2 FS=" " file1 | column -t

Follow awkможет помочь вам здесь.

awk 'FNR==NR{a[FNR]=$0;next} (FNR in a){$2=a[FNR]} 1' file2 file1 | column -t
0 голосов
/ 04 июня 2018

Я немного озадачен, зачем вам второй файл.Вся информация file2 представляется закодированной в file1.Вы можете просто сделать что-то вроде этого:

awk '{$2=$1"_"$4"_"$5"_"$6}1' file1
0 голосов
/ 04 июня 2018

Ваш файл2 имеет только один столбец, поэтому с awk.

awk -v f='file2' '{getline $2 <f}1' file1

Если разделителем файла2 является "_"

awk -v f='file2' '{getline a <f;split(a,b,"_");$2=b[1]}1' file1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...