【发布时间】:2021-02-18 04:37:00
【问题描述】:
如下所述,我们得到了一个可变长度的输入文件。文字长度不一。
输入文件:
ID|Text
1|name1=value1;name3;name4=value2;name5=value5
2|name1=value1;name2=value2;name6=;name7=value7;name8=value8
此处的文本已命名值对作为内容,并且长度不等。请注意,文本列中的名称可以包含分号。我们正在尝试解析输入,但我们无法通过 AWK 或 BASH 处理它
期望的输出:
1|name1=value1
1|name3;name4=value2
1|name5=value5
2|name1=value1
2|name2=value2
2|name6=
2|name7=value7
2|name8=value8
以下代码片段适用于 ID=2,但不适用于 ID=1
echo "2|name1=value1;name2=value2;name6=;name7=value7;name8=value8" | while IFS="|"; read id text;do dsc=`echo $text|tr ';' '\n'`;echo "$dsc" >tmp;done
cat tmp
2|name1=value1
2|name2=value2
2|name6=
2|name7=value7
2|name8=value8
echo "1|name1=value1;name3;name4=value2;name5=value5" | while IFS="|"; read id text;do dsc=`echo $text|tr ';' '\n'`;echo "$dsc" >tmp;sed -i "s/^/${id}\|/g" tmp;done
cat tmp
1|name1=value1
1|name3
1|name4=value2
1|name5=value5
非常感谢任何帮助。
【问题讨论】:
-
您提到过使用
awk和bash,但没有显示任何包含这些引用的代码;请查看how do I ask a good question 和how to create a minimal, reproducible example,然后考虑相应地更新您的问题(例如,提供示例输入、您的代码尝试、您的代码生成的(错误)输出和(正确)所需的输出) -
那么你发布的输出是你想要显示的输出还是你迄今为止尝试过的输出?
-
你能告诉我们你正在寻找的输出吗?
-
请编辑问题以包含您的其他详细信息;不是每个人都会花时间通读 cmets 试图拼凑出整个画面;谢谢
-
@markp-fuso - 这是一个无意的错字,现在更正了。我还添加了代码 sn-p 仅适用于 ID = 2 但不适用于 ID = 1