我有一个CSV文件,其中包含一些包含逗号的数据。我试图在不考虑其他字段的情况下整体检索数据。
输入示例
id,name,marks,subject/s
1, Dileep, Kumar, 78, Maths
2, Pavan, Joshi, 76, Science, Social
3, Naveen, 95, English
我可以删除字段中的逗号,因为名称是一列,即使其中有其他逗号
需要输出 -
id,name,marks,subject/s
1, Dileep Kumar, 78, Maths
2, Pavan Joshi, 76, Science Social
3, Naveen, 95, English
我知道删除主题的逗号没有意义,但这就是我的要求。
请帮帮我
答案 0 :(得分:0)
如果您的Input_file与显示的示例相同,那么以下内容可能对您有帮助。
awk '$2~/[a-zA-Z]+/ && $3!~/[a-zA-Z]+/{$2=$2~/,/?$2:$2",";print;next} $2~/[a-zA-Z]+/ && $3~/[a-zA-Z]+/{sub(/,/,"",$2)} 1' Input_file
或者现在添加非单一衬里形式的溶液。
awk '
$2~/[a-zA-Z]+/ && $3!~/[a-zA-Z]+/{
$2=$2~/,/?$2:$2",";
print;
next
}
$2~/[a-zA-Z]+/ && $3~/[a-zA-Z]+/{
sub(/,/,"",$2)
}
1
' Input_file
输出如下。
id,name,marks,subject/s
1, Dileep Kumar, 78, Maths
2, Pavan Joshi, 76, Science, Social
3, Naveen, 95, English
答案 1 :(得分:0)
echo 'id,name,marks,subject/s
1, Dileep, Kumar, 78, Maths
2, Pavan, Joshi, 76, Science, Social
3, Naveen, 95, English' | sed -r 's/(^\s*[0-9]+,\s*[a-zA-Z]+),(\s*[a-zA-Z])/\1\2/g'
id,name,marks,subject/s
1, Dileep Kumar, 78, Maths
2, Pavan Joshi, 76, Science, Social
3, Naveen, 95, English
答案 2 :(得分:0)
用于patsplit()和gensub()的GNU awk:
$ cat tst.awk
{
nf = patsplit($0,nums,/ [0-9]+, /,rest)
$0 = ""
for (i=0; i<=nf; i++) {
$0 = $0 nums[i] gensub(/, /," ","g",rest[i])
}
print
}
$ awk -f tst.awk file
id,name,marks,subject/s
1, Dileep Kumar, 78, Maths
2, Pavan Joshi, 76, Science Social
3, Naveen, 95, English