如何删除前导和尾随“,删除每行中的前导和尾随空格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 " 

请建议的方式,这将是与我已写的脚本兼容。

+1

HuMMM,哪里是你的代码? –

+0

你可以引用的字段是否包含'|'s?例如'“Alex”|“Software | Design | Engg”|“E0023”'。 –

此脚本可能会过度设计以满足您的需求,但它会在每个字段上单独运行(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 
+0

gsub(/(^“[] * | [] *”$)/,“”,$ i); – user6613676

+0

我已经使用了这个解决方案。 gsub(/(^“[] * | [] *”$)/,“”,$ i); 这给出了下面的结果: 如果场地两边都有空间,它只能修整一边,即领先空间。我必须修改脚本: gawk -F“|” '{OFS =“|” (i = 1; i user6613676

+0

你为什么把'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脚本以及合并没有这个额外的步骤。

+1

thx,删除'-r'。 – karakfa

如果您引用字段不能包含|当时的现有awk脚本中添加此作为第一行:

awk ' 
{ gsub(/[[:space:]]*"[[:space:]]*/,"") } 
<existing script> 
'