使用 Miller 从 CSV URL 列中提取域

使用 Miller 从 CSV URL 列中提取域

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

相关内容