работает сед с двумя инструкциями - PullRequest
5 голосов
/ 08 марта 2012

Я хотел запустить эти строки sed:

sed 's/\/1\/1/\/1/g' file -i && sed 's/\/2\/2/\/2/g' file -i

над файлом, подобным этому:

chr9_paternal   126628489       126629719       616L7AAXX_HWUSI-EAS627_0005:1:1:1157:5733/1/1   0       +       126628489       126629719       255,0,0 2
       19,57   0,1173
chr20_paternal  34093622        34093697        616L7AAXX_HWUSI-EAS627_0005:1:1:1158:4527/1/1   0       +       34093622        34093697        255,0,0 1
       75      0
chr17_paternal  44627748        44633513        616L7AAXX_HWUSI-EAS627_0005:1:1:1158:5412/2/2   0       +       44627748        44633513        255,0,0 2
       36,40   0,5725
chr1_paternal   224204536       224204611       616L7AAXX_HWUSI-EAS627_0005:1:1:1158:2312/1   0       +       224204536       224204611       255,0,0 1
       75      0
chr7_paternal   132309510       132309585       616L7AAXX_HWUSI-EAS627_0005:1:1:1158:1687/2/2   0       +       132309510       132309585       255,0,0 1
       75      0
chr20_paternal  45708069        45708144        616L7AAXX_HWUSI-EAS627_0005:1:1:1158:13916/1  63      +       45708069        45708144        255,0,0 1
       75      0
chr9_paternal   134850662       134850737       616L7AAXX_HWUSI-EAS627_0005:1:1:1158:10141/1/1  72      +       134850662       134850737       255,0,0 1
       75      0
chrX_paternal   71603273        71603348        616L7AAXX_HWUSI-EAS627_0005:1:1:1158:8367/2   30      +       71603273        71603348        255,0,0 1

, чтобы получить этот вывод:

chr9_paternal   126628489       126629719       616L7AAXX_HWUSI-EAS627_0005:1:1:1157:5733/1   0       +       126628489       126629719       255,0,0 2
       19,57   0,1173
chr20_paternal  34093622        34093697        616L7AAXX_HWUSI-EAS627_0005:1:1:1158:4527/1   0       +       34093622        34093697        255,0,0 1
       75      0
chr17_paternal  44627748        44633513        616L7AAXX_HWUSI-EAS627_0005:1:1:1158:5412/2   0       +       44627748        44633513        255,0,0 2
       36,40   0,5725
chr1_paternal   224204536       224204611       616L7AAXX_HWUSI-EAS627_0005:1:1:1158:2312/1   0       +       224204536       224204611       255,0,0 1
       75      0
chr7_paternal   132309510       132309585       616L7AAXX_HWUSI-EAS627_0005:1:1:1158:1687/2   0       +       132309510       132309585       255,0,0 1
       75      0
chr20_paternal  45708069        45708144        616L7AAXX_HWUSI-EAS627_0005:1:1:1158:13916/1  63      +       45708069        45708144        255,0,0 1
       75      0
chr9_paternal   134850662       134850737       616L7AAXX_HWUSI-EAS627_0005:1:1:1158:10141/1  72      +       134850662       134850737       255,0,0 1
       75      0
chrX_paternal   71603273        71603348        616L7AAXX_HWUSI-EAS627_0005:1:1:1158:8367/2   30      +       71603273        71603348        255,0,0 1

Но файл довольно большой, и я не хочу читать его дважды.Можно ли запустить код sed, который выполняет две инструкции одновременно?

Ответы [ 3 ]

6 голосов
/ 08 марта 2012

Вы можете использовать -e для выполнения нескольких выражений в одном sed вызове:

sed -e <expr> -e <expr> -i <file>
4 голосов
/ 08 марта 2012

В этом примере, выполнив всего два редактирования, вы можете довольно просто использовать -e или точку с запятой между операциями, как показано в других ответах.У меня есть сценарии с 10 или более -e опциями в последовательных строках.

Если это еще более усложняется (или вам нужно сгенерировать много отображений из некоторых данных), вы можете написать файл и иметь sedпрочитайте его инструкции из файла с опцией -f:

sed -f sed.script -i file
4 голосов
/ 08 марта 2012

Если я правильно понял, вы хотите заменить /1/1 на /1 и аналогично /2/2 на /2:

sed -i 's:/1/1:/1:;s:/2/2:/2:' file

Используйте двоеточие : вместо / чтобы избежать побега.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...