我在ksh脚本中有很多函数(使用gawk很多),它对文件进行了很多计算。文件是管道删除。 但现在我的源文件发生了变化。现在文件中的每个字段都在双引号内,如下所示。 另外,我必须修剪前导和尾随空格或标签(如果有的话)。
Old_Myfile.txt
Name|Designation|emlid
Alex|Software Design Engg|E0023
Corner|SDE|E0056
New_Myfile.txt
"Name"|"Designation"|"emlid"
"Alex"|"Software Design Engg"|" E0023"
" Corner "|" SDE"|" E0056 "
请提供与我已编写的脚本兼容的方法。
答案 0 :(得分:2)
sed
$ sed 's/ *" *//g' file
Name|Designation|emlid
Alex|Software Design Engg|E0023
Corner|SDE|E0056
可以在awk
脚本中组合而不需要额外的步骤。
答案 1 :(得分:0)
此脚本可能会根据您的需要进行过度设计,但它会在每个字段上单独运行(在for循环中),以防您以后需要添加其他逻辑。
BEGIN{
FS="|";
OFS="|";
}
{
for(i=1; i<=NF; i++){
gsub(/(^"[ ]*|[ ]*"$)/, "", $i);
if (i == NF) {
printf("%s\n", $i);
}
else {
printf("%s%s", $i, OFS);
}
}
}
这是输出
$ awk -f /tmp/script.awk </tmp/input.txt
Name|Designation|emlid
Alex|Software Design Engg|E0023
Corner|SDE|E0056
答案 2 :(得分:0)
如果引用的字段不能包含|
s,那么在现有的awk脚本中添加以下内容作为第一行:
awk '
{ gsub(/[[:space:]]*"[[:space:]]*/,"") }
<existing script>
'