使用RegEx将带引号的文本日志文件转换为单个列

使用RegEx将带引号的文本日志文件转换为单个列,regex,bash,csv,export-to-csv,Regex,Bash,Csv,Export To Csv,我有一个文本日志文件,我想在这个文件中捕获的所有内容都在引号中(在单独的行中) 我想在该行显示“值”后捕获该数据,但不包括该行,第一行显示“行”,但不再显示。我想将文件导出为CSV文件。每个txt文件都有12行我想捕获的数据,但如果我也能增加这些数据,那就太好了。类似这样的东西 导入csv 导入json 将open('data.json')作为数据文件: data=json.load(数据文件) 打开(“test.csv”、“wb+”)作为输出文件: f=csv.writer(打开(“outpu

我有一个文本日志文件,我想在这个文件中捕获的所有内容都在引号中(在单独的行中)

我想在该行显示“值”后捕获该数据,但不包括该行,第一行显示“行”,但不再显示。我想将文件导出为CSV文件。每个txt文件都有12行我想捕获的数据,但如果我也能增加这些数据,那就太好了。

类似这样的东西

导入csv
导入json
将open('data.json')作为数据文件:
data=json.load(数据文件)
打开(“test.csv”、“wb+”)作为输出文件:
f=csv.writer(打开(“output.csv”、“wb+”)
对于数据[‘行’]中的条目:
f、 writerow(条目['values'])
您正在将数据从JSON转换为CSV。请注意,JSON已经是一种非常容易解析的格式,因此这种转换不一定需要,甚至不是一个好主意

假设您的输入名为data.json

{"rows": [
    {"values": [
        "word",
        "120.134.12.43",
        "34780",
        "33.334.115.100",
        "9834-5202011",
        "221",
        "NYC-LOG-01.test",
        "something.test.com",
        "something.test.com\/",
        "internet-communications-and-telephony",
        "983439849389483",
        "unknown, United States"
    ]},
    {"values": [
        "ssl",
        "20.311.3.21",
        "3443",
        "40.51.96.219",
        "93140-9834811",
        "211",
        "nyc-log-01.test",
        "a.jones.com",
        "a.jones.com\/",
        "news",
        "3434231343434356",
        "Somewhere, California, United States, 12345"
    ]
}]}
像这样的

导入csv
导入json
将open('data.json')作为数据文件:
data=json.load(数据文件)
打开(“test.csv”、“wb+”)作为输出文件:
f=csv.writer(打开(“output.csv”、“wb+”)
对于数据[‘行’]中的条目:
f、 writerow(条目['values'])
您正在将数据从JSON转换为CSV。请注意,JSON已经是一种非常容易解析的格式,因此这种转换不一定需要,甚至不是一个好主意

假设您的输入名为data.json

{"rows": [
    {"values": [
        "word",
        "120.134.12.43",
        "34780",
        "33.334.115.100",
        "9834-5202011",
        "221",
        "NYC-LOG-01.test",
        "something.test.com",
        "something.test.com\/",
        "internet-communications-and-telephony",
        "983439849389483",
        "unknown, United States"
    ]},
    {"values": [
        "ssl",
        "20.311.3.21",
        "3443",
        "40.51.96.219",
        "93140-9834811",
        "211",
        "nyc-log-01.test",
        "a.jones.com",
        "a.jones.com\/",
        "news",
        "3434231343434356",
        "Somewhere, California, United States, 12345"
    ]
}]}

您的数据看起来像是JSON格式的?(您缺少周围的
{}
?)。如果是这样,最简单的方法就是使用解析器,比如
jq

$ jq -r '.rows[].values | @csv' input-file
"word","120.134.12.43","34780","33.334.115.100","9834-5202011","221","NYC-LOG-01.test","something.test.com","something.test.com/","internet-communications-and-telephony","983439849389483","unknown, United States"
"ssl","20.311.3.21","3443","40.51.96.219","93140-9834811","211","nyc-log-01.test","a.jones.com","a.jones.com/","news","3434231343434356","Somewhere, California, United States, 12345"
或者可以使用Python附带的
json
模块

$ python -c 'import csv, json, sys; csv.writer(sys.stdout).writerows(row["values"] for row in json.load(sys.stdin)["rows"])' < filename

您的数据看起来像是JSON格式的?(您缺少周围的
{}
?)。如果是这样,最简单的方法就是使用解析器,比如
jq

$ jq -r '.rows[].values | @csv' input-file
"word","120.134.12.43","34780","33.334.115.100","9834-5202011","221","NYC-LOG-01.test","something.test.com","something.test.com/","internet-communications-and-telephony","983439849389483","unknown, United States"
"ssl","20.311.3.21","3443","40.51.96.219","93140-9834811","211","nyc-log-01.test","a.jones.com","a.jones.com/","news","3434231343434356","Somewhere, California, United States, 12345"
或者可以使用Python附带的
json
模块

$ python -c 'import csv, json, sys; csv.writer(sys.stdout).writerows(row["values"] for row in json.load(sys.stdin)["rows"])' < filename

好的,谢谢Paul,希望有人能帮忙,干杯C。抱歉,我的输出应该是csv。因此,除了“值”和“行”之外,引号中的每个项目都在一行的单独列中。目的是让我可以分类,如新闻等再次感谢我真的很感谢你的支持。对不起,我不明白你在说什么。为什么我的输入不完整?开头有几行,但不知道这有什么关系,因为我希望正则表达式只根据数据查找引号中的项,并将这12项放在一行中,每列一项。我想使用terminal.sh正则表达式来完成此任务。我说得通吗?谢谢谢谢保罗,希望有人能帮忙,干杯C。抱歉,我的输出应该是csv。因此,除了“值”和“行”之外,引号中的每个项目都在一行的单独列中。目的是让我可以分类,如新闻等再次感谢我真的很感谢你的支持。对不起,我不明白你在说什么。为什么我的输入不完整?开头有几行,但不知道这有什么关系,因为我希望正则表达式只根据数据查找引号中的项,并将这12项放在一行中,每列一项。我想使用terminal.sh正则表达式来完成此任务。我说得通吗?不,我只是从文本文件导入,或者这是json格式?我会在bash中尝试一下,看看会发生什么。抱歉,我对自己的编程太生疏了,再次感谢你。Bash,哦,对不起,我写了Python!当我在我的MAC电脑上的终端上运行这个程序时,结果是下面的“grep:empty(sub)expression”我没有正确阅读问题上的标签,对不起。上面的代码是Python。所以如果你想运行它,把它放在一个名为
program.py
的文件中,然后运行
python program.py
。啊,我需要它在正则表达式中,而不是在python中,因为这是一个要求,因为我正在尝试学习正则表达式。如果你能转换这将是惊人的,因为我喜欢看到它的工作感谢C。嗨,不,我只是从一个文本文件导入,或者可能这是json格式?我会在bash中尝试一下,看看会发生什么。抱歉,我对自己的编程太生疏了,再次感谢你。Bash,哦,对不起,我写了Python!当我在我的MAC电脑上的终端上运行这个程序时,结果是下面的“grep:empty(sub)expression”我没有正确阅读问题上的标签,对不起。上面的代码是Python。所以如果你想运行它,把它放在一个名为
program.py
的文件中,然后运行
python program.py
。啊,我需要它在正则表达式中,而不是在python中,因为这是一个要求,因为我正在尝试学习正则表达式。如果你能转换,那将是惊人的,因为我喜欢看到它的工作感谢C。