我想做的是复制第一列中每一行的第一个数据并将其放入创建的最后一列中的超链接中
这是我每天收到的文件的示例。我们将此文件称为input.csv,我想将其转换为output.csv
PS 行数每天都不同。
输入.CSV
number|name|age|gender
B24|mike|22|male
B65|john|45|male
B74|jane|29|female
Run Code Online (Sandbox Code Playgroud)
这就是我想要的样子:
输出.CSV
number|name|age|gender|website
B24|mike|22|male|<a href=https://www.abcdef.com/query=B24>B24</a>
B65|john|45|male|<a href=https://www.abcdef.com/query=B65>B65</a>
B74|jane|29|female|<a href=https://www.abcdef.com/query=B74>B74</a>
Run Code Online (Sandbox Code Playgroud)
为了使它更整洁,我放置了一些变量
测试文件
#!/bin/bash
NUMBER=(data from the "number" column of each corresponding row in the input.csv file)
URL=https://www.abcdef.com/search?query=$NUMBER
awk -F"|" 'BEGIN { OFS = "|" } {$5="<a href='$URL'>'$NUMBER'</a>"; print}' input.csv > output.csv
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经能够做到这一点,只需创建一个新列并在整个列中重复超链接,失败输出的结果如下:
结果失败
number|name|age|gender|<a href=https://www.abcdef.com/search?query=></a>
B65|john|45|male|<a href=https://www.abcdef.com/query=B65>B65</a>
B74|jane|29|female|<a href=https://www.abcdef.com/query=B74>B74</a>
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
第一个解决方案:根据您显示的示例,请尝试以下awk代码。用 GNU 编写和测试awk。
awk '
BEGIN { FS=OFS="|" }
FNR==1{
print $0,"website"
next
}
{
print $0,"<a href=https://www.abcdef.com/query="$1">"$1"</a>"
}
' Input_file
Run Code Online (Sandbox Code Playgroud)
第二个解决方案在上面添加了 1 个以上的代码变体awk,其中将变量命名firstHeader为具有值,<a href=https://www.abcdef.com/query=以防万一我们将来需要更改它,然后我们不需要更改主程序。
awk -v firstHeader="<a href=https://www.abcdef.com/query=" -v secheader="</a>" '
BEGIN { FS=OFS="|" }
FNR==1{
print $0,"website"
next
}
{
print $0,firstHeader $1">"$1 secheader
}
' Input_file
Run Code Online (Sandbox Code Playgroud)
或者在上面的版本中使用三元运算符条件进行一些调整:
awk -v firstHeader="<a href=https://www.abcdef.com/query=" -v secheader="</a>" '
BEGIN { FS=OFS="|" }
{
print $0, (FNR==1 ? "website" : firstHeader $1">"$1 secheader)
}
' Input_file
Run Code Online (Sandbox Code Playgroud)