如何用〜替换文件每一行中特定位置之间的空格
how to replace the spaces with ~ between specific position in every line of a file
我有一个要求,文件中的记录是“|”管道分隔。
字段4至字段20各20个字符。这些字段可能有前导和尾随 space,或者整个字段只能有 space。我只想将字段 4 的管道符号的开头和结尾处的 space 替换为字段 20。
我该怎么做?
样本记录:
XXXX|XXXX| XXXXXX|05.00000% 02/01/2030|OXXXXXXX, TEST |XXXXXXW | | | | | | | | | | | | |ORG |0001-01-01|10|14|XXX|2016-05-01| | |2016-10-14|0001-01-01|2030-02-01|2014-01-01|Y|2|000|1|I| | | |N|SA |N|2016-05-26|A|US|2016-05-01| |Y|N|08 |SDBM1 |Y|Y| |N| |N|N| | | | | |R| | |N| | |0000000000000000.00| |0000000000000000.0000| | |2|XXXXX|2014-10-06|AA |2016-05-11| |0001-01-01| |0001-01-01|05.00000|2016-05-11| |C |2010-09-10|0001-01-01|XXXX| |2011-06-09| |2011-06-09|2026-02-01|0000000100.000000000|P| |0000000000.000000000|
预期输出:
....something.. |~ MAhesh ~|~MAHESH KMR|MKR ~|.. till 20th field
请注意,仅当开头和结尾为 space 时才应进行替换,否则不得替换。
awk -F"|" 'BEGIN{OFS="|"}{for(i=4;i<=20;i++){$i = match($i,/^[[:space:]]/)? "~"substr($i,2): $i; $i = match($i,/[[:space:]]$/)? substr($i,1,19)"~":$i}} 1' < file
可读性
检查文件的开头和结尾是否有space,然后相应地替换
awk -F"|" '
BEGIN{OFS="|"}
{
for(i=4;i<=20;i++){
$i = match($i,/^[[:space:]]/) ? "~"substr($i,2): $i;
$i = match($i,/[[:space:]]$/) ? substr($i,1,19)"~":$i
}
} 1
' < file
我有一个要求,文件中的记录是“|”管道分隔。 字段4至字段20各20个字符。这些字段可能有前导和尾随 space,或者整个字段只能有 space。我只想将字段 4 的管道符号的开头和结尾处的 space 替换为字段 20。
我该怎么做?
样本记录:
XXXX|XXXX| XXXXXX|05.00000% 02/01/2030|OXXXXXXX, TEST |XXXXXXW | | | | | | | | | | | | |ORG |0001-01-01|10|14|XXX|2016-05-01| | |2016-10-14|0001-01-01|2030-02-01|2014-01-01|Y|2|000|1|I| | | |N|SA |N|2016-05-26|A|US|2016-05-01| |Y|N|08 |SDBM1 |Y|Y| |N| |N|N| | | | | |R| | |N| | |0000000000000000.00| |0000000000000000.0000| | |2|XXXXX|2014-10-06|AA |2016-05-11| |0001-01-01| |0001-01-01|05.00000|2016-05-11| |C |2010-09-10|0001-01-01|XXXX| |2011-06-09| |2011-06-09|2026-02-01|0000000100.000000000|P| |0000000000.000000000|
预期输出:
....something.. |~ MAhesh ~|~MAHESH KMR|MKR ~|.. till 20th field
请注意,仅当开头和结尾为 space 时才应进行替换,否则不得替换。
awk -F"|" 'BEGIN{OFS="|"}{for(i=4;i<=20;i++){$i = match($i,/^[[:space:]]/)? "~"substr($i,2): $i; $i = match($i,/[[:space:]]$/)? substr($i,1,19)"~":$i}} 1' < file
可读性
检查文件的开头和结尾是否有space,然后相应地替换
awk -F"|" '
BEGIN{OFS="|"}
{
for(i=4;i<=20;i++){
$i = match($i,/^[[:space:]]/) ? "~"substr($i,2): $i;
$i = match($i,/[[:space:]]$/) ? substr($i,1,19)"~":$i
}
} 1
' < file