Добавить строку в столбцы в Bash - PullRequest
0 голосов
/ 11 июня 2019

У меня есть файл с разделителями-запятыми, к которому я хочу добавить строку в определенных столбцах. Я пытаюсь сделать что-то подобное , но до сих пор не смог.

re1,1,a1e,a2e,AGT
re2,2,a1w,a2w,AGT
re3,3,a1t,a2t,ACGTCA
re12,4,b1e,b2e,ACGTACT

И я хочу добавить 'some_string' к столбцам 3 и 4:

re1,1,some_stringa1e,some_stringa2e,AGT
re2,2,some_stringa1w,some_stringa2w,AGT
re3,3,some_stringa1t,some_stringa2t,ACGTCA
re12,4,some_stringb1e,some_stringb2e,ACGTACT

Я пробовал что-то похожее на решение для предложения, но безрезультатно:

awk -v OFS=$'\,' '{ $3="some_string" $3; print}' $lookup_file

Кроме того, я хотел бы, чтобы моя строка была добавлена ​​в оба столбца. Как бы вы сделали это с помощью awk или bash?

Большое спасибо заранее

Ответы [ 3 ]

1 голос
/ 11 июня 2019

Вы можете сделать это с (почти) тем, что у вас есть:

pax> echo 're1,1,a1e,a2e,AGT
re2,2,a1w,a2w,AGT
re3,3,a1t,a2t,ACGTCA
re12,4,b1e,b2e,ACGTACT' | awk 'BEGIN{FS=OFS=","}{$3 = "pre3:"$3; $4 = "pre4:"$4; print}'

re1,1,pre3:a1e,pre4:a2e,AGT
re2,2,pre3:a1w,pre4:a2w,AGT
re3,3,pre3:a1t,pre4:a2t,ACGTCA
re12,4,pre3:b1e,pre4:b2e,ACGTACT

Блок begin устанавливает разделители входного и выходного полей, два поля назначений массажа 3 и 4, а print выводит измененную строку.

1 голос
/ 11 июня 2019
Действие по умолчанию

awk состоит в объединении, поэтому вы можете просто поместить строки рядом друг с другом, и они будут рассматриваться как единое целое. 1 означает истину, поэтому без {action} он примет «печать». Вы можете использовать Brace Expansion для назначения нескольких переменных после сценария.

awk '{$3 = "three" $3; $4 = "four" $4} 1' {O,}FS=,
1 голос
/ 11 июня 2019

Вам нужно установить FS на запятую, а не просто OFS. Есть ярлык для настройки FS, это опция -F.

awk -F, -v OFS=',' '{ $3="some_string" $3; $4 = "some_string" $4; print}' "$lookup_file"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...