我在第5个字段中有一个用竖线分隔的CSV文件,带有URL,我正在寻找使用awk
命令来复制问号字符之前的所有内容,并添加一个包含其内容的新列。我当前使用的命令是:
cat test.log | awk -F\| -v OFS=\| '{sub(/\?(.*)/,OFS "&", $7); print}' > test2.log
这有一些问题:
当前命令中的正则表达式用于查找问号后的所有内容。用于查找之前所有内容的正则表达式是/ [^?] *,但是我在尝试在命令中使用它时遇到语法错误。我对此并不担心,因为我可以通过更多测试来解决它。
上面的命令创建一个新列,该列的数据与正则表达式匹配,但是它将其从列中删除而不是复制。
这是我正在寻找的示例:
||||test.com|moredata|
||||test2.com?p1=1|moredata|
||||test3.com?p1=1&p2=2|moredata|
成为:
||||test.com|moredata|test.com
||||test2.com?p1=1|moredata|test2.com
||||test3.com?p1=1&p2=2|moredata|test3.com
有没有替代该功能的功能类似的功能(例如-匹配?),请先感谢!
答案 0 :(得分:0)
使用split()
将URL拆分为?
字符,然后您可以获取之前的部分并将其附加。
awk -F\| -v OFS=\| '{split($5, url, "\?"); $5 = $5 OFS url[1]; print}'
答案 1 :(得分:0)
有很多方法可以从提供的输入中获取所需的输出,但是使用sub()似乎是最简单的,所以idk为什么要避免这种情况:
$ awk 'BEGIN{FS=OFS="|"} {$NF=$5; sub(/[?].*/,"",$NF)} 1' file
||||test.com|moredata|test.com
||||test2.com?p1=1|moredata|test2.com
||||test3.com?p1=1&p2=2|moredata|test3.com