gpt4 book ai didi

bash - 通过拆分特定字段将行拆分为多个

转载 作者:行者123 更新时间:2023-11-29 09:16:38 26 4
gpt4 key购买 nike

我有多行,例如:

"390";"902";"from 4670000 to 4679999, from 4680000 to 4689999, from 9960000 to 9969999";"something1";"something2";"20.09.04"
"390";"903";"from 0770000 to 0779999, from 9170000 to 9179999";"something3";"something4";"09.09.04"

我需要的是:

"390";"902";"from 4670000 to 4679999";"something1";"something2";"20.09.04"
"390";"902";"from 4680000 to 4689999";"something1";"something2";"20.09.04"
"390";"902";"from 9960000 to 9969999";"something1";"something2";"20.09.04"
"390";"903";"from 0770000 to 0779999";"something3";"something4";"09.09.04"
"390";"903";"from 9170000 to 9179999";"something3";"something4";"09.09.04"

如您所见,我需要在 from/to 标记上拆分 variable3(注意有时“,”之间有一个空格)。

理想情况下,我需要结果输出:

"390";"902";"4670000";"4679999";"something1";"something2";"20.09.04"
"390";"902";"4680000";"4689999";"something1";"something2";"20.09.04"
"390";"902";"9960000";"9969999";"something1";"something2";"20.09.04"
"390";"903";"0770000";"0779999";"something3";"something4";"09.09.04"
"390";"903";"9170000";"9179999";"something3";"something4";"09.09.04"

我已经发现我可以通过 awk 拆分,但我不确定如何复制该行的其余部分:

awk -F\, '{                       
for (i = 0; ++i <= NF;)
print i, $i
}' <<<'from 4670000 to 4679999, from 4680000 to 4689999, from 9960000 to 9969999'
1 from 4670000 to 4679999
2 from 4680000 to 4689999
3 from 9960000 to 9969999

抱歉,这是我的第一个问题,请随时指出我应该如何更正它才能得到完整的回答。

谢谢!

最佳答案

对于输入:

"390";"902";"from 4670000 to 4679999, from 4680000 to 4689999, from 9960000 to 9969999";"something1";"something2";"20.09.04"
"390";"903";"from 0770000 to 0779999, from 9170000 to 9179999";"something3";"something4";"09.09.04"

这段代码

#!/usr/bin/awk -f

BEGIN {
FS = ";"
}

{
t = $3
gsub(/"/, "", t)
n = split(t, a, /, /)
for (i = 1; i <= n; ++i) {
print $1 ";" $2 ";\"" a[i] "\";" $4 ";" $5 ";" $6
}
}

会给予

"390";"902";"from 4670000 to 4679999";"something1";"something2";"20.09.04"
"390";"902";"from 4680000 to 4689999";"something1";"something2";"20.09.04"
"390";"902";"from 9960000 to 9969999";"something1";"something2";"20.09.04"
"390";"903";"from 0770000 to 0779999";"something3";"something4";"09.09.04"
"390";"903";"from 9170000 to 9179999";"something3";"something4";"09.09.04"

浓缩形式(我不认为它真的可以称为真正的“单行”):

awk -F ";" -- '{ t = $3; gsub(/"/, "", t); n = split(t, a, /, /); for (i = 1; i <= n; ++i) print $1 ";" $2 ";\"" a[i] "\";" $4 ";" $5 ";" $6 }'

还有这段代码

#!/usr/bin/awk -f

BEGIN {
FS = ";"
}

{
t = $3
gsub(/"|from /, "", t)
n = split(t, a, /, | to /)
for (i = 1; i <= n; i += 2) {
print $1 ";" $2 ";\"" a[i] "\";\"" a[i + 1] "\";"$4 ";" $5 ";" $6
}
}

愿意给

"390";"902";"4670000";"4679999";"something1";"something2";"20.09.04"
"390";"902";"4680000";"4689999";"something1";"something2";"20.09.04"
"390";"902";"9960000";"9969999";"something1";"something2";"20.09.04"
"390";"903";"0770000";"0779999";"something3";"something4";"09.09.04"
"390";"903";"9170000";"9179999";"something3";"something4";"09.09.04"

压缩形式:

awk -F ";" -- '{ t = $3; gsub(/"|from /, "", t); n = split(t, a, /, | to /); for (i = 1; i <= n; i += 2) print $1 ";" $2 ";\"" a[i] "\";\"" a[i + 1] "\";"$4 ";" $5 ";" $6; }'

脚本使用 gawk、nawk 和 mawk 进行测试。

关于bash - 通过拆分特定字段将行拆分为多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18428414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com