我在尝试解码 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。
致以诚挚的问候
我将利用 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 中测试)