excel - 使用 CSV 文件中的唯一模式过滤特定数据,并将该数据移动到同一行的新列

标签 excel linux shell csv

这是我的 csv 格式的示例数据。实际数据远不止这个。

这是基于文本的数据,以便您可以自己尝试。

Ms Excel 上的实际数据(csv/xlsx 格式)可以在下面的屏幕截图中看到。

[24/09/2018:22:41:49 GMT] "PROXY_SERVER_BA2" c-ip=x.x.x.x cs-bytes=1198 cs-categories="Technology/Internet" cs-host=shavar.services.mozilla.com cs-ip=y.y.y.y cs-method=CONNECT cs-uri-path=/ cs-uri-port=443 cs-uri-scheme=tcp cs-User-Agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0" cs-username=johndoe dnslookup-time=0 duration=60 rs-status=0 s-action=TCP_TUNNELED

[24/09/2018:17:45:44 GMT] "PROXY_SERVER_AA2" c-ip=x.x.x.x cs-bytes=152450 cs-categories="Business/Economy" cs-host=cvshipping.ups.com cs-ip=z.z.z.z cs-method=CONNECT cs-uri-path=/ cs-uri-port=443 cs-uri-scheme=tcp cs-User-Agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0" cs-username=johndoe dnslookup-time=0 duration=268 rs-status=0 s-action=TCP_TUNNELED

[24/09/2018:17:44:03 GMT] "PROXY_SERVER_AA2" c-ip=x.x.x.x cs-bytes=1795 cs-categories="Software Downloads" cs-host=blocklist.addons.mozilla.org cs-ip=z.z.z.z cs-method=CONNECT cs-uri-path=/ cs-uri-port=443 cs-uri-scheme=tcp cs-User-Agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0" cs-username=johndoe dnslookup-time=0 duration=61 rs-status=0 s-action=TCP_TUNNELED

[24/09/2018:17:41:44 GMT] "PROXY_SERVER_AA2" c-ip=x.x.x.x cs-bytes=3882 cs-categories="Web Ads/Analytics" cs-host=cebwa.d2.sc.omtrdc.net cs-ip=z.z.z.z cs-method=CONNECT cs-uri-path=/ cs-uri-port=443 cs-uri-scheme=tcp cs-User-Agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0" cs-username=johndoe dnslookup-time=0 duration=35 rs-status=0 s-action=TCP_TUNNELED

[20/09/2018:15:48:50 GMT] "PROXY_SERVER_AA2" c-ip=a.a.a.a cs-auth-group=Domain%20Users cs-bytes=227 cs-categories="Web Ads/Analytics;Suspicious" cs-host=data35.adlooxtracking.com cs-ip=b.b.b.b cs-method=CONNECT cs-uri-path=/ cs-uri-port=443 cs-uri-scheme=tcp cs-User-Agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0" cs-username=johndoe duration=0 rs-status=0 s-action=TCP_TUNNELED

[20/09/2018:15:48:35 GMT] "PROXY_SERVER_AA2" c-ip=a.a.a.a cs-auth-group=Domain%20Users cs-bytes=3201 cs-categories="Search Engines/Portals" cs-host=www.google.com cs-ip=b.b.b.b cs-method=CONNECT cs-uri-path=/ cs-uri-port=443 cs-uri-scheme=tcp cs-User-Agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0" cs-username=johndoe dnslookup-time=0 duration=117 rs-status=0 s-action=TCP_TUNNELED

enter image description here

每一行都包含 cs-categories="",正如突出显示的那样,它具有不同的值,例如技术/互联网不可查看/基础设施技术/互联网;网络广告/分析网络广告/分析;可疑 ...仅举几例。

我的目标是获取 cs-categories="" 及其值并将其放入同一行/行的另一列中。

这很棘手,因为 cs-categories="" 位于数据中间,并且值各不相同。 例如:

cs-categories="Technology/Internet"
cs-categories="Non-Viewable/Infrastructure"
cs-categories="Technology/Internet;Web Ads/Analytics"
cs-categories="Web Ads/Analytics;Suspicious"

我还尝试过在 Linux 中移动这些数据,并尝试使用 shell 命令(例如 grep unique string)完成相同的操作,但目前效果不佳。

主要目标是从此日志中获取时间戳、URL 和类别。

如果 Shell 脚本、Python 或其他脚本中的其他解决方案更简单,也请告诉我。

最佳答案

 sed -r 's/^(\[[^\]*\]) (.* cs-categories=")([^"]*)(".*cs-host=)([^ ]*) /\1 \3 \5 \2\3\4\5 /'
 #           \1                  \2           \3          \4      \5
 #       Timestamp                        Categories             Host

关于excel - 使用 CSV 文件中的唯一模式过滤特定数据,并将该数据移动到同一行的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52513616/

相关文章:

bash - 检查字符串是否为 UUID

vba - 控制标题文本显示得更小

linux - 让非root用户在Docker中写入linux主机

linux - 编写linux脚本将1970年1月1日之前的时间戳转换为1970年2月2日

python - 在执行之前将所有从 python 脚本触发的 shell 命令打印到控制台

xml - 使用 xmlstarlet 替换 XML 中的标记值

excel - 基本数组公式仅适用于第一个单元格

excel - 为什么使用 office.js 在 excel 范围内粘贴数据需要太长时间?

python - 如何以编程方式将 Excel 电子表格 (.xls) 转换为 shapefile?

linux - 在 Linux 机器上搜索多个值的最快方法