![使用 Miller 从 CSV URL 列中提取域](https://linux22.com/image/192611/%E4%BD%BF%E7%94%A8%20Miller%20%E4%BB%8E%20CSV%20URL%20%E5%88%97%E4%B8%AD%E6%8F%90%E5%8F%96%E5%9F%9F.png)
CSV 内容与此类似:
Family,URL,IP,FirstSeen
Pony,http://officeman.tk/images/admin.php,207.180.230.128,01-06-2019
Pony,http://learn.cloudience.com/ojekwaeng/yugo/admin.php,192.145.234.108,01-06-2019
Pony,http://vman23.com/ba24/admin.php,95.213.204.53,01-06-2019
我知道URL
可以使用以下方式选择该列:
mlr --mmap --csv --skip-comments --headerless-csv-output cut -f 'URL'
如何使用 Miller 提取域而不通过管道传输到其他命令?
期望的输出:
officeman.tk
learn.cloudience.com
vman23.com
答案1
米勒的瑞士军刀是放动词 - 它使您可以访问整个领域特定语言用于转换您的数据。从那里有几种方法:
- 使用正则表达式匹配并捕获 URL 的域部分
- 使用正则表达式修剪前导和尾随组件
- 将 URL 拆分为分隔字符串
例如
mlr --mmap --csv --skip-comments --headerless-csv-output put -S '
$URL =~ "https?://([^/]+)"; $Domain = "\1"
' then cut -f Domain file.csv
或者
mlr --mmap --csv --skip-comments --headerless-csv-output put -S '
m = splitnvx($URL,"/"); $Domain = m[3]
' then cut -f Domain file.csv
答案2
如果您可以使用其他命令,则可以尝试awk
。该命令将类似于:
awk -F\/ 'FNR!=1 {print $3}' input_file.csv
这个想法是用作/
分隔符并打印字段 3
答案3
跑步
mlr --c2n put '$m = splitnvx($URL,"/")[3]' then cut -f m input.csv
你将会拥有
officeman.tk
learn.cloudience.com
vman23.com