我有一个要求,即文件中的记录是“|”管道划界。 字段4到字段20各为20个字符。这些字段可能包含前导和尾随空格,或者整个字段只能是空格。我想将第4个字段的管道符号的开头和末尾的空格替换为字段20.
我该怎么做?
SAMPLE记录:
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
请注意,只有在开头和结尾都是空格时才会发生替换,否则不能替换。
答案 0 :(得分:0)
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
为了便于阅读
检查该字段是否在开始和结束时有空格,然后相应地替换
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