我需要从一行中的特定字段(第2,第4,第5,第7个字段)中删除括号“{”,我尝试使用以下命令但没有帮助
a,{1},hello{hi}hello,{+2A},{3},un{i}x,{4}
a,1,hello{hi}hello,+2A,3,un{i}x,4
awk -v FS="," -v OFS="," 'BEGIN { split("2,4,5,7", F); } { for(N in F) sub("\\(\\)","", $(F[N])) }1' testfile | sed 's/,,/,/g'
答案 0 :(得分:3)
您可以使用此clean_slug
:
class FlavorForm(forms.ModelForm):
def clean_title(self):
# even if this is a required field, it might be missing
# Django will check for required fields, no need to raise
# that error here, but check for existence
title = self.cleaned_data.get('title', None)
if title and not value.startswith('Tasty'):
msg = 'Must start with Tasty'
raise ValidationError(msg):
return title
class Meta:
model = Flavor
fields = ['title', 'slug', 'scoops_remaining']
<强>输出:强>
awk
答案 1 :(得分:2)
awk 解决方案:
awk -F, '{ for(i=1;i<=NF;i++) if(i~/^(2|4|5|7)$/) gsub(/[}{]/,"",$i) }1' OFS=',' file
i~/^(2|4|5|7)$/
- 如果字段编号与备用组中的任何项目匹配输出:
a,1,hello{hi}hello,+2A,3,un{i}x,4
答案 2 :(得分:1)
尝试一次。
awk -F, '{for(i=1;i<=NF;i++){if((i==2||i==5||i==4||i==7) && (($i ~ /\}/) ||($i ~ /\{/))){gsub(/{|}/,"",$i);}}} 1' OFS=, Input_file
编辑:此处也添加非单一形式的解决方案。
awk -F, '{
for(i=1;i<=NF;i++){
if((i==2||i==5||i==4||i==7) && (($i ~ /\}/) ||($i ~ /\{/))){
gsub(/{|}/,"",$i)
}}}
1
' OFS=, Input_file
EDIT1:如果你想删除)也只考虑相同的字段编号,你可以在上面的代码中进行小编辑。
awk -F, '{
for(i=1;i<=NF;i++){
if((i==2||i==5||i==4||i==7) && (($i ~ /\}/) ||($i ~ /\{/))){
gsub(/{|}|)/,"",$i)
}}}
1
' OFS=, Input_file
答案 3 :(得分:1)
主要是为了保持perl技能稍微磨练(每6个月左右你需要在perl中做一些事情!)
perl -F, -lane '$,=","; $F[$_ - 1]=~s/[{}]//g foreach(2,4,5,7); print @F;' input-file
答案 4 :(得分:0)
awk -v FS="," -v OFS="," 'BEGIN { split("2,4,5,7", F, ","); } { for(N in F) {gsub(/[}{]/,"", $(F[N]))} }1'