/ / Замініть символ на # (символ символу хешу) лише в 5-му та 6-му полі - perl, replace, awk

Замініть символ символом # (хеш-символом) лише у 5-му та 6-му полі - perl, замініть, awk

Я намагаюся замінити персонажа на # (хешsymble) лише у 5-му та 6-му полі. напр. Мені потрібно замінити "Z" на "#" лише в 5-му та 6-му полі (за допомогою скрипта perl або AWK). А інші поля, що містять символ "Z", не повинні впливати.

(просто я оновлюю пост, щоб замінити подвійні лапки (") замість Z на #. Чи можу я це отримати? дякую за дорогу допомогу) наприклад: i / p файл:

aa",bb,ccc,ddd,eee",ddd",fff
aa1",ba1,ccc1,"ddd1,eee"1,ddd1,fff1
z,aa2,bb2",ccc2,ddd2","eee2",ddd2,fff2"

Очікуваний O / p файл:

aa",bb,ccc,ddd,eee#,ddd#,fff
aa1",ba1,ccc1,#ddd1,eee#1,ddd1,fff1
aa2,bb2",ccc2,ddd2#,#eee2#,ddd2,fff2"

Дякую.

Відповіді:

0 для відповіді № 1

Оскільки його лише два подані, цикл можна опустити.

awk -F, -v OFS=, "{gsub(/Z/,"#",$5);gsub(/Z/,"#",$6)} 1" file
x,aaZ,bb,ccc,ddd,eee#,dddZ,fff
y,aa1Z,ba1,ccc1,#ddd1,eee#1,ddd1,fff1
z,aa2,bb2Z,ccc2,ddd2#,#eee2,ddd2,fff2Z

Замінити " у п’ятому та шостому полі:

awk -F, -v OFS=, "{gsub(/"/,"#",$5);gsub(/"/,"#",$6)} 1" file
aa",bb,ccc,ddd,eee#,ddd#,fff
aa1",ba1,ccc1,"ddd1,eee#1,ddd1,fff1
z,aa2,bb2",ccc2,ddd2#,#eee2#,ddd2,fff2"

1 для відповіді № 2
$ awk "BEGIN{FS=OFS=","} {for (i=5;i<=6;i++) gsub(/Z/,"#",$i)} 1" file
x,aaZ,bb,ccc,ddd,eee#,dddZ,fff
y,aa1Z,ba1,ccc1,#ddd1,eee#1,ddd1,fff1
z,aa2,bb2Z,ccc2,ddd2#,#eee2,ddd2,fff2Z

0 для відповіді № 3

Ось Perl-спосіб зробити цю роботу:

perl -anF, -e "$"=","; s/Z/#/ for (@F)[4,5];print"@F";" < in1.txt

Якщо у вас мутипле Z у полі ви можете використовувати:

perl -anF, -e "$"=","; s/Z/#/g for (@F)[4,5];print"@F";" < in1.txt

Вихід:

aaZ,bb,ccc,ddd,eee#,ddd#,fff
aa1Z,ba1,ccc1,Zddd1,eee#1,ddd1,fff1
aa2,bb2Z,ccc2,ddd2Z,#eee2,ddd2,fff2Z

Редагувати відповідно до коментаря:

in1.txt

aa",bb,ccc,ddd,eee",ddd",fff
aa1",ba1,ccc1,"ddd1,eee"1,ddd1,fff1
aa2,bb2",ccc2,ddd2","eee2,ddd2,fff2"

Команда:

perl -anF"","" -e "$"=",";s/"/#/ for (@F)[4,5];print"@F";" < in1.txt

результат:

aa",bb,ccc,ddd,eee#,ddd#,fff
aa1",ba1,ccc1,"ddd1,eee#1,ddd1,fff1
aa2,bb2",ccc2,ddd2",#eee2,ddd2,fff2"