2014-11-12 3 views
0

У меня есть файл с разделителями табуляции с колоннами, как показано ниже:заменить определенный шаблон в колонке с использованием AWK или GSUB

1 2 3 Score\x3e366\x3bName\x3elod\x3e41 
3 5 6 Score\x3e366\x3bName\x3elod\x3e41 

Мне нужно заменить «\ x3e» с «=» и «\ X3B ' с ';' в 4-й колонке. Результат должен выглядеть так:

1 2 3 Score=366;Name=lod=41 
3 5 6 Score=366;Name=lod=41 

Может кто-нибудь помочь с awk/gsub для этого. Заранее спасибо.

ответ

0

Как насчет sed?

more file.txt | sed -e s/\\\\x3e/=/g | sed -e s/\\\\x3b/\;/g 

Правда, это беспечно делает предположение о том, что эти символьные последовательности не будет происходить в любом месте за пределами 3-го столбца, но если это допустимо выше должны работать для вас.

+0

большое спасибо. Он отлично работает, но я думал, существует ли такая модель в другом месте, возможно ли ограничить конкретный столбец? – chas

+0

Почему вы 'больше'и файл? –

+0

@Jidder Вы можете предложить лучший подход? – Madbreaks

0
$ awk '{col=$4; gsub(/\\x3e/,"=",col); gsub(/\\x3b/,";",col); sub(/[^[:space:]]+$/,col)} 1' file 
1 2 3 Score=366;Name=lod=41 
3 5 6 Score=366;Name=lod=41 

Общий случай, когда колонна необходимости замен не последний столбец в строке:

$ cat file 
1 2 3 Score\x3e366\x3bName\x3elod\x3e41 foo 
3 5 6 Score\x3e366\x3bName\x3elod\x3e41 bar 

это (с использованием ГНУ AWK для gensub() и разбиты на отдельные строки для удобства чтения):

$ awk -v n=4 '{ 
    col = $n 
    gsub(/\\x3e/,"=",col) 
    gsub(/\\x3b/,";",col) 
    print gensub("(\\s*)((\\S+\\s+){"n-1"})\\S+(.*)","\\1\\2" col "\\4","") 
}' file 
1 2 3 Score=366;Name=lod=41 foo 
3 5 6 Score=366;Name=lod=41 bar 
Смежные вопросы