我在Unix上具有以下CSV文件,并且我只想从最后一个字段(由|分隔)中删除所有特殊字符和空格,请您帮忙?
当前输入:
16-DEC-16 11:42:50 AM|VV161216.1142.H21611|01234567891|9876543210|155|BILLPAYMENT C.UTIL
预期输出:
16-DEC-16 11:42:50 AM|VV161216.1142.H21611|01234567891|9876543210|155|BILLPAYMENTCUTIL
答案 0 :(得分:2)
假设您要删除非字母数字字符,可以使用以下awk
命令:
awk 'BEGIN { FS=OFS="|" } { gsub("[^a-zA-Z0-9]+", "", $NF); print $0 }' inputFile
BEGIN { FS=OFS="|" }
将字段定界符设置为|
用于输出和输入。gsub("[^a-zA-Z0-9]+", "", $NF)
用空字符串替换最后一个字段中的所有非字母数字字符序列print $0
输出更新后的行您可以try it here。
请注意,这取决于字段值中缺少|
字符,而CSV允许使用转义的分隔符或在引用的字段值中使用。如果您在这种情况下,最好使用预先存在的CSV解析器。
答案 1 :(得分:2)
假设您要从可以使用的每一行的最后一个字段中删除所有不是大写或小写字母或数字([A-Za-z0-9]
)的字符
awk -F '|' -v 'OFS=|' '{ gsub(/[^A-Za-z0-9]/,"",$NF); print}' inputfile > outputfile
从问题中的输入行中准确地创建所需的输出行。
答案 2 :(得分:0)
这可能对您有用(GNU sed):
customButtons: {
promptResource: {
text: "+ room",
click: function() {
var title = prompt("Room name");
if (title) {
calendar.addResource({
title: title
});
fetch("add_resources.php", {
method: "POST",
headers: {
Accept: "application/json"
},
body: encodeFormData({ "title": title})
})
.then(response => console.log(response))
.catch(error => console.log(error));
}
}
}
},
此操作会在每一行中向后移动,以除去sed -E ':a;s/[^[:alnum:]|]([[:alnum:]]*)$/\1/;ta' file
,a-z
,A-Z
或0-9
以外的任何字符,直到到达字段定界符_
,即仅操作在每行的最后一个字段上。
如果最后一个字段只能包含大写字母字符,请使用:
|