繁体   English   中英

如何从分隔文件中的数据字段替换分隔符

[英]How to replace delimiter from a data field in a delimited file

专家,我正在尝试替换 pipe 字符“|” 来自 pipe 分隔文件中的数据字段。

记录有 12 个字段,最后一个字段有 '|' 作为数据的一部分。

记录就像-

A|B|C|D|E|F|G|H|I|J|K|TextWith|Delimiter

我想用空格替换最后一个字段中的分隔符。 我如何实现它? 我尝试了一些 awk 命令,但没有得到想要的结果。

期望的结果-

A|B|C|D|E|F|G|H|I|J|K|TextWith Delimiter

有什么建议么?

这有效:

echo 'A|B|C|D|E|F|G|H|I|J|K|TextWith|Delimiter' |
 awk  'BEGIN{FS=OFS="|"}
       {$(NF-1)=$(NF-1) " " $(NF); NF=NF-1} 1'

sed

echo 'A|B|C|D|E|F|G|H|I|J|K|TextWith|Delimiter' |
 sed -E 's/\|([^|]*)$/ \1/'

gawk (Linux 原生):

echo 'A|B|C|D|E|F|G|H|I|J|K|TextWith|Delimiter' |
 gawk '{match($0, "(.*)\\|([^|]*$)", arr); print arr[1] " " arr[2]}'

Perl

echo 'A|B|C|D|E|F|G|H|I|J|K|TextWith|Delimiter' |
 perl -lpe 's/\|([^|]*$)/ $1/'

任何印刷品:

A|B|C|D|E|F|G|H|I|J|K|TextWith Delimiter

您已经发布了两次评论不适用于我在上面评论中粘贴的记录(如果字段中有 *,它会继续尝试列出当前目录中的所有文件)

这可能是 shell 的引用和上下文问题。

考虑:

$ echo *
 file file.txt powerlog

对比:

$ echo "*"
*

第一个由 shell 扩展(因为该字符串没有被引用)并且该扩展是当前目录中文件的名称。 第二个是文字字符串*

一个简单的sed方法:

$ echo "A|B|C|D|E|F|G|H|I|J|K|TextWith|Delimiter" | sed 's/|/ /12'
A|B|C|D|E|F|G|H|I|J|K|TextWith Delimiter

12 告诉它只替换每行正则表达式的第 12 个匹配项。

这是另一个使用包含星号的输入的调用:

$ cat line
A|5|A|1|u|5|L|2|O|H|V|**** SETT|LEMENT DOCUMENTATION **** FinalOffer **** REASON : had been oot work previously **** SOURCE OF FUNDS : work **** DISCLOSURE READ : YES **** DELINQUENCY STAGE: RECOVERY **** ACCOUNT BALANCE : $2.46 **** SIF AMOUNT : $12**** PERCENTAGE : 19 % **** NUMBER OF DAYS : 128 **** PAYMENT 1: $50 DATE1: 7/21/2020

$ sed 's/|/ /12' line
A|5|A|1|u|5|L|2|O|H|V|**** SETT LEMENT DOCUMENTATION **** FinalOffer **** REASON : had been oot work previously **** SOURCE OF FUNDS : work **** DISCLOSURE READ : YES **** DELINQUENCY STAGE: RECOVERY **** ACCOUNT BALANCE : $2.46 **** SIF AMOUNT : $12**** PERCENTAGE : 19 % **** NUMBER OF DAYS : 128 **** PAYMENT 1: $50 DATE1: 7/21/2020

这是 awk 方法:

awk -F\| -v OFS=\| '{ print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12 " " $13 }'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM