我的档案:
Nicole,Foo,senior,Lexington
John,Doe,junior,Chicago
John,Fool,True,junior,Detroit
Lara,True,Fool,senior,Miami
我想要的:当有四个逗号而不是三个逗号时,删除第二个逗号:
Nicole,Foo,senior,Lexington
John,Doe,junior,Chicago
John,Fool True,junior,Detroit
Lara,True Fool,senior,Miami
我尝试了什么:
用四个逗号检测行:
awk -F, '{print NF-1; next; print $0}' myfile
删除一行中的第二个逗号:
sed 's/,/ /2' myfile
我仍然无法做到: 合并这两个命令,仅将sed命令应用于包含4个逗号的行。我怀疑它可以用xargs以某种方式完成,但我不知道如何使用这种条件声明来处理它。
也许有人可以给我一些方向?
答案 0 :(得分:1)
试试这个:
sed '/\([^,]*,\)\{4\}/s/,/ /2' file
当找到4个非逗号字符串后跟逗号的序列时,用空格替换第二个逗号。
答案 1 :(得分:0)
在awk中(我将sed
用于此):
$ awk '
BEGIN { FS=OFS="," } # separators
NF==5 { # for five-fielded records
for(i=2;i<NF;i++) # starting from the second
$i=(i==2?$i " ":"") $(i+1) # append or replace with the next field
NF=4 # reduce the field count for those records
}1' file
Nicole,Foo,senior,Lexington
John,Doe,junior,Chicago
John,Fool True,junior,Detroit
Lara,True Fool,senior,Miami
答案 2 :(得分:0)
也请尝试以下awk:
awk -F, '{for(i=1;i<=NF;i++){if(NF>4){if(i==2){$i=$i " "$(i+1)};if(i==3){continue}};printf("%s%s",$i,i==NF?"":",");}print ""}' Input_file
OR
awk -F, '{
for(i=1;i<=NF;i++){
if(NF>4){
if(i==2){
$i=$i " "$(i+1)
};
if(i==3){
continue
}
};
printf("%s%s",$i,i==NF?"":",");
}
print ""
}' Input_file
答案 3 :(得分:0)
gawk '/Fool,|True,/{$0=gensub(/,/," ",2)}1' file
Nicole,Foo,senior,Lexington
John,Doe,junior,Chicago
John,Fool True,junior,Detroit
Lara,True Fool,senior,Miami