用于分组数据的正则表达式

时间:2017-03-07 09:01:34

标签: javascript regex linux shell csv

我需要定期表达才能将数据分组到CSV文件中。我需要将数据分组到特定字符串" PDP-TD-PDP" 我的文件内容如下。

PDP-TD-PDP
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
PDP-TD-PDP
ffffff
gggggg
hhhhhh
iiiiii
PDP-TD-PDP
jjjjjj
kkkkkk
llllll
mmmmmm

所以我的结果应该如下,我需要将数据分组到每个

1 PDP-TD-PDP
1 aaaaaa
1 bbbbbb
1 cccccc
1 dddddd
1 eeeeee
2 PDP-TD-PDP
2 ffffff
2 gggggg
2 hhhhhh
2 iiiiii
3 PDP-TD-PDP
3 jjjjjj
3 kkkkkk
3 llllll
3 mmmmmm

我们需要这个要求,因为对于每个特殊字符串" PDP-TD-PDP"我们需要将内容加载到不同的表。如果我们有组ID,那么我们可以轻松地从文件中提取

2 个答案:

答案 0 :(得分:0)

如何将字符串拆分成行然后对它们进行分析呢?



const data = `
PDP-TD-PDP

aaaaaa

bbbbbb

cccccc

dddddd

eeeeee

PDP-TD-PDP

ffffff

gggggg

hhhhhh

iiiiii

PDP-TD-PDP

jjjjjj

kkkkkk

llllll

mmmmmm`

const asignId = data => {
    const lines = data.split('\n')
    let out = ''
    let id = 0
    for (let i = 0; i < lines.length; i++) {
        if (/\S+/.test(lines[i])) {
            if (/PDP-TD-PDP/.test(lines[i])) id++
            out += id + ' ' + lines[i] + '\n'
        } else {
            out += lines[i] + '\n'
        }
    }
    return out
}
console.log(asignId(data))
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你要求正则表达式,但为了保留一个计数器,你需要更多或其他东西。如果您声明正在使用的正则表达式的语言(例如:perl&#39; s等),则可以提供正则表达式。

但是,您的样本测试可以使用awk脚本转换为您的样本输出(请注意它不是CSV!)。我们假设您的示例文本被调用:&#34; sample.csv&#34;

awk 'BEGIN { count=0 } { if ($1 == "PDP-TD-PDP") count++; print count, $0 }' sample.csv > sample.out

然后,sample.out将具有您在样本中要求的输出。 $ 0包含整个记录,$ 1包含第一个单词。

然而;如你所说,你正在处理一个CSV文件,你可能希望输出更像:

1,....

1,....

2,....

2,....

那么,你的awk脚本应该是这样的:

awk 'BEGIN { FS=",", count=0 } { if ($1 == "PDP-TD-PDP") count++; print count "," $0 }' sample.csv > sample.out

注意更改:FS设置在开头(字段分隔符),并且print语句更改为在计数和记录之间打印逗号,而逗号周围没有空格。

如果PDP-TD-PDP可以出现在任何地方,而不仅仅是第一条记录,则通过(/ PDP-TD-PDP /)更改:($ 1 ==&#34; PDP-TD-PDP&#34;)。