删除字符串中的竖线和双引号

问题描述 投票:0回答:1

我在尝试解码 1 个 CSV 文件时遇到一些挑战。 作为分隔符,我有管道来识别列号和双引号来识别大字符串列。

我需要执行准备处理脚本来删除这些不需要的字符,并为 Sample2 添加缺少的双引号。

样本1:

...|Pending|"XXX LPA. LTD. - GridBird TEST (Monthly) (Collage Maker | Photo Editor)"|749|...

样本2:

...|Pending|"Take Five Entertainment" Limited Liability Partnership - Pack with cats "Halloween" (Cat Simulator: My Pets)|...

期望输出:

样本1:

...|Pending|"XXX LPA. LTD. - GridBird TEST (Monthly) (Collage Maker Photo Editor)"|749|...

样本2:

...|Pending|"Take Five Entertainment Limited Liability Partnership - Pack with cats Halloween (Cat Simulator: My Pets)"|749|...

我尝试使用正则表达式来识别第一个样本并用 sed 替换,但似乎我缺少一些 sed 行为,它是如何工作的,因为首先我需要识别字符串模式,然后仅替换在这种情况下的任何字符 |或“

^.*\|\".*(\||\").*(\"\|\d|\|\d)

在这个正则表达式上,我正在识别|”和(“|数字或只是|数字)之间的字符串。

下一步是我很困惑如何使用 Sed。

致以诚挚的问候

awk sed
1个回答
0
投票

我将利用 GNU

AWK
进行
|
删除,让
file.txt
内容成为

...|Pending|"XXX LPA. LTD. - GridBird TEST (Monthly) (Collage Maker | Photo Editor)"|749|...

然后

awk 'BEGIN{FS=OFS="\""}{for(i=2;i<=NF;i+=2){gsub(/[|][[:space:]]*/,"",$i)};print}' file.txt

提供输出

...|Pending|"XXX LPA. LTD. - GridBird TEST (Monthly) (Collage Maker Photo Editor)"|749|...

说明:我通知 GNU

AWK
"
既是字段分隔符 (
FS
) 又是输出字段分隔符 (
OFS
),然后使用 for 循环删除偶数字段中的
|
(即引号内)这样做之后我
print
改变了线路。

关于第二个要求,您需要确定哪些列算作大字符串列,然后您可能会执行以下操作,假设您要调整

|
剪切的
file.txt
内容的第三列中的引号

1|shortstring|"correctly quoted string"
2|shortstring|"this" need better "quoting"
3|shortstring|quotes are missing

然后

awk 'BEGIN{FS=OFS="|"}{gsub(/"/,"",$3);$3="\"" $3 "\"";print}' file.txt

提供输出

1|shortstring|"correctly quoted string"
2|shortstring|"this need better quoting"
3|shortstring|"quotes are missing"

说明:我使用

gsub
来使用第三个字段中的空字符串(即删除它们)替换
"
,然后将第三个字段更改为引号与第三个字段与引号的串联,之后我使用
print
行。

(在 GNU Awk 5.3.1 中测试)

© www.soinside.com 2019 - 2024. All rights reserved.