拆分列';将值转换为多行awk/unix/python
以下是输入数据的示例行:拆分列';将值转换为多行awk/unix/python,python,unix,awk,Python,Unix,Awk,以下是输入数据的示例行: header: id,indicator,{(pid,days_remaining)} row: id_558314,1,{(property_66021,7),(property_24444,1),(property_285395,6)} 预期数据输出: header: id,indicator,pid,days_remaining row1: id_558314,1,property_66021,7 row2: id_558314,1,property_2
header: id,indicator,{(pid,days_remaining)}
row: id_558314,1,{(property_66021,7),(property_24444,1),(property_285395,6)}
预期数据输出:
header: id,indicator,pid,days_remaining
row1: id_558314,1,property_66021,7
row2: id_558314,1,property_24444,1
row3: id_558314,1,property_285395,6
使用awk/unix/python很容易做到这一点吗?这可能会对您有所帮助
$ cat file
header: id,indicator,{(pid,days_remaining)}
row: id_558314,1,{(property_66021,7),(property_24444,1),(property_285395,6)}
$ awk -F, '{gsub(/[{}()]/,"")}FNR==1{print;next}{j=0;p=$1;for(i=3; i<=NF; i+=2){ $1=p;sub(/:/,++j"&",$1);print $1,$2,$i,$(i+1)}}' OFS=, file
header: id,indicator,pid,days_remaining
row1: id_558314,1,property_66021,7
row2: id_558314,1,property_24444,1
row3: id_558314,1,property_285395,6
$cat文件
标题:id,指示符,{(pid,剩余天数)}
行:id_558314,1,{(property_66021,7),(property_24444,1),(property_285395,6)}
$awk-F,'{gsub(/[{}()]/,“”)}FNR==1{print;next}{j=0;p=$1;用于(i=3;是的,这不是很难做到…现在,这个论坛不是关于我们做你的工作。你尝试过什么吗?你正在阅读文本文件的输入吗?我很抱歉没有发布我尝试过的内容。我对堆栈溢出和awk也相当陌生。我在玩一些sed命令,结合print的:awk-F“{{print$2}”| awk-F”(“{print$2}”| sed's/),$//g”,但我一直在努力运行一个循环来实现这一点,并且仍然打印第一列和第二列@sgp@jcoppens我将发布我尝试继续进行的所有研究。感谢大家的关注和关注。嗨@AkshayHegde-非常感谢你们在这里提供的帮助。这对我来说确实奏效了。
awk -F, '{
gsub(/[{}()]/,"")
}
FNR==1{
print
next
}
{
j=0
p=$1
for(i=3; i<=NF; i+=2)
{
$1=p
sub(/:/,++j"&",$1)
print $1,$2,$i,$(i+1)
}
}
' OFS=, file