如何从定界文件中的数据字段替换定界符

问题描述

专家,我正在尝试替换竖线字符“ |”从管道分隔文件的数据字段中获取。

记录有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

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

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

考虑:

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...