Awk 仅使用命令行解析url
我有一个如下所示的csv文件:Awk 仅使用命令行解析url,awk,sed,Awk,Sed,我有一个如下所示的csv文件: id,author,url 1,bob,http://mywebsite.com/path/to/content 2,john,https://anotherwebsite.com/path/to/some/other/content 3,alice,http://www.somewebsite.com/path/to/content 我想把它变成: id,author,url 1,bob,mywebsite.com 2,john,anotherwebsite.
id,author,url
1,bob,http://mywebsite.com/path/to/content
2,john,https://anotherwebsite.com/path/to/some/other/content
3,alice,http://www.somewebsite.com/path/to/content
我想把它变成:
id,author,url
1,bob,mywebsite.com
2,john,anotherwebsite.com
3,alice,somewebsite.com
我知道用javascript或python可以很容易地做到这一点,但我正在试图理解awk
和sed
是如何工作的。是否有一种方法可以仅使用命令行工具轻松完成此操作
非常感谢这应该可以:
awk -F, 'NR>1{split($3,a,"/");$0=$1","$2","a[3]}1' file
id,author,url
1,bob,mywebsite.com
2,john,anotherwebsite.com
3,alice,www.somewebsite.com
使用,
然后,对于除第一行
NR>1
、拆分字段$3
之外的所有行,重新创建该行。1
全部打印
同时删除
www.
awk -F, 'NR>1{split($3,a,"/");sub(/^www./,"",a[3]);$0=$1","$2","a[3]}1'
id,author,url
1,bob,mywebsite.com
2,john,anotherwebsite.com
3,alice,somewebsite.com
在SO中有很多类似的问题,它们要求使用re解析url。真诚的回答是,请不要。如果你想学习这两种工具,你需要找到更合适的。url不适合re。您希望
www.somewebsite.com
转换为somewebsite.com
。www
是您想要去除的唯一前缀吗?关于foo.somewebsite.com
的一般情况,例如www.google.com
vsdrive.google.com
vscalendar.google.com
?这个子(/^www./,”,a[3])
从URL中删除www.
,如果它在开始的话。请看我更新的帖子。如果你想去掉所有后缀,而不仅仅是www.
,你可能需要:awk-F'[,/]+''NR>1{match($4,/[^.]+\..[^.]+$/);$0=$1“,“$2”,“substr($4,RSTART,RLENGTH)}1”文件
@EdMorton不是一个好的解决方案。这将把site.com.br
更改为com.br
,这就是目的,例如,drive.google.com
将减少为google.com
,就像www.google.com
一样。为什么这不是一个好的解决方案?我认为这是可取的…@EdMorton,正如我所写的,有许多网站使用双国家扩展,这将受到影响。看看这两个:www.time.co.uk
和time.co.uk
。我的解决方案会给出time.co.uk
和time.co.uk
,你的解决方案会给出time.co.uk
和co.uk
。最后一个将不会给出有用的域名。