如何删除前导和尾随“,删除每行中的前导和尾随空格ksh
我在ksh脚本中有很多函数(它使用gawk很多),它对文件进行了许多计算,文件被管道删除。 但现在我的源文件改变。现在,每个文件中的字段的内容如下双引号的。 另外,我有修剪如果任何首尾空格或制表符。如何删除前导和尾随“,删除每行中的前导和尾随空格ksh
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 "
请建议的方式,这将是与我已写的脚本兼容。
此脚本可能会过度设计以满足您的需求,但它会在每个字段上单独运行(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
gsub(/(^“[] * | [] *”$)/,“”,$ i); – user6613676
我已经使用了这个解决方案。 gsub(/(^“[] * | [] *”$)/,“”,$ i); 这给出了下面的结果: 如果场地两边都有空间,它只能修整一边,即领先空间。我必须修改脚本: gawk -F“|” '{OFS =“|” (i = 1; i user6613676
你为什么把'gsub'改成'sub'? 'gsub'将“全局”替换每一行的每一行。这比拥有两个每个执行“次”操作的for循环更可取。此外,'gawk -F“|”'和'gawk'BEGIN {FS =“|”...“'没有区别。只是指出,如果你不知道。至于你的正则表达式,可以用包装提供的正则表达式来包装它。另外我不确定你为什么需要修改脚本。帖子中的输出是你期望的输出,对吗?缺少哪些边缘案例?谨慎提供这些? – wpcarro
与sed
$ sed 's/ *" *//g' file
Name|Designation|emlid
Alex|Software Design Engg|E0023
Corner|SDE|E0056
可以在awk
脚本以及合并没有这个额外的步骤。
thx,删除'-r'。 – karakfa
如果您引用字段不能包含|
当时的现有awk脚本中添加此作为第一行:
awk '
{ gsub(/[[:space:]]*"[[:space:]]*/,"") }
<existing script>
'
HuMMM,哪里是你的代码? –
你可以引用的字段是否包含'|'s?例如'“Alex”|“Software | Design | Engg”|“E0023”'。 –