Awk 从特定字段的逗号分隔值中删除单词

Awk 从特定字段的逗号分隔值中删除单词,awk,sed,text-processing,Awk,Sed,Text Processing,NIS组文件的格式为 group1:*:100:bat,cat,zat,ratt group2:*:200:rat,cat,bat group3:*:300:rat 使用:作为分隔符,需要从第4列中删除确切的单词(例如rat)。应删除单词的任何前导或尾随,,以便在第4列中保留逗号分隔值格式 预期输出: group1:*:100:bat,cat,zat,ratt group2:*:200:cat,bat group3:*:300: 你最好用awk做这项工作。试试这个(GNU awk): 使用:

NIS
组文件的格式为

group1:*:100:bat,cat,zat,ratt
group2:*:200:rat,cat,bat
group3:*:300:rat
使用
作为分隔符,需要从第4列中删除确切的单词(例如
rat
)。应删除单词的任何前导或尾随
,以便在第4列中保留逗号分隔值格式

预期输出:

group1:*:100:bat,cat,zat,ratt
group2:*:200:cat,bat
group3:*:300:

你最好用awk做这项工作。试试这个(GNU awk):


使用
作为字段分隔符,
gsub
删除第4个字段中的所有
rat
\y
用于单词边界,以便
rat
匹配,但不匹配
rrat

如果
perl
解决方案正常:

修改样本输入以添加更多相关案例

$ cat ip.txt 
group1:*:100:bat,cat,zat,ratt
group2:*:200:rat,cat,bat
group3:*:300:rat
group4:*:400:mat,rat,sat
group5:*:500:pat,rat

$ perl -F: -lane '(@a) = split/,/,$F[3]; $F[3] = join ",", grep { $_ ne "rat" } @a; print join ":", @F' ip.txt
group1:*:100:bat,cat,zat,ratt
group2:*:200:cat,bat
group3:*:300:
group4:*:400:mat,sat
group5:*:500:pat
  • -F:
    上拆分输入行并保存到
    @F
    数组中
  • (@a)=拆分/,/,$F[3]
    拆分
    上的第四列,
    并保存到
    @a
    数组
  • $F[3]=join“,”,grep{$\ne“rat”}@a
    删除
    @a
    数组中与
    rat
    完全匹配的元素,将这些元素与
    连接,并修改输入行的第四个字段
  • print join:“,@F
    打印由

打高尔夫球以避开临时阵列
@a

$ perl -F: -lane '$F[3] = join ",", grep { $_ ne "rat" } split/,/,$F[3]; print join ":", @F' ip.txt

在第4列中使用正则表达式:

$ perl -F: -lane '$F[3] =~ s/,rat\b|\brat(,|\b)//g; print join ":", @F' ip.txt 
group1:*:100:bat,cat,zat,ratt
group2:*:200:cat,bat
group3:*:300:
group4:*:400:mat,sat
group5:*:500:pat
这可能适用于您(GNU-sed):


删除一个或多个单词
rat
,然后是一个可能的

Sundeep如何在循环中执行此操作,我们需要清理100个名称获得它,
perl-i-F:-lane'(@a)=split/,/,$F[3]$F[3]=join“,”,grep{$\ne“rat”}@a;打印加入“:”,@F'group1
awk 'NR>1{sub(/rat,*/,"")}1' file

group1:*:100:bat,cat,zat,ratt
group2:*:200:cat,bat
group3:*:300:
sed -r 's/\brat\b,?//g' file
awk 'NR>1{sub(/rat,*/,"")}1' file

group1:*:100:bat,cat,zat,ratt
group2:*:200:cat,bat
group3:*:300: