如何删除前导和尾随 " ,从 ksh 中每个字段的每一行中删除前导和尾随空格
How to remove leading and trailing " , remove leading and trailing spaces from each row each field in ksh
我在 ksh 脚本(经常使用 gawk)中有很多函数,它们对文件进行很多计算。文件是管道删除的。
但是现在我的源文件改变了。现在文件中的每个字段都包含在双引号内,如下所示。
此外,如果有的话,我必须 trim 前导和尾随空格或制表符。
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 "
请提出与我已经编写的脚本兼容的方法。
和sed
$ sed 's/ *" *//g' file
Name|Designation|emlid
Alex|Software Design Engg|E0023
Corner|SDE|E0056
也可以在 awk
脚本中合并,无需此额外步骤。
此脚本可能针对您的需要进行了过度设计,但它会单独对每个字段进行操作(在 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
如果您引用的字段不能包含 |
,那么在您现有的 awk 脚本中将其添加为第一行:
awk '
{ gsub(/[[:space:]]*"[[:space:]]*/,"") }
<existing script>
'
我在 ksh 脚本(经常使用 gawk)中有很多函数,它们对文件进行很多计算。文件是管道删除的。 但是现在我的源文件改变了。现在文件中的每个字段都包含在双引号内,如下所示。 此外,如果有的话,我必须 trim 前导和尾随空格或制表符。
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 "
请提出与我已经编写的脚本兼容的方法。
和sed
$ sed 's/ *" *//g' file
Name|Designation|emlid
Alex|Software Design Engg|E0023
Corner|SDE|E0056
也可以在 awk
脚本中合并,无需此额外步骤。
此脚本可能针对您的需要进行了过度设计,但它会单独对每个字段进行操作(在 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
如果您引用的字段不能包含 |
,那么在您现有的 awk 脚本中将其添加为第一行:
awk '
{ gsub(/[[:space:]]*"[[:space:]]*/,"") }
<existing script>
'