我想做的是从第一列中的每一行复制第一个数据并将其放入最后创建的列中的超链接
这是我每天收到的文件示例。我们将此文件称为 input.csv,我想将其转换为 output.csv
附言行数每天都不同。
INPUT.CSV
number|name|age|gender
B24|mike|22|male
B65|john|45|male
B74|jane|29|female
这就是我想要的样子:
输出.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>
为了让它更整洁,我放置了一些变量
测试.sh
#!/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
到目前为止,我已经能够做到这一点,它只是创建一个新列并在整个列中重复超链接,我失败的输出结果如下:
失败的结果
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>
感谢您的帮助!
最佳答案
第一个解决方案:使用您显示的示例,请尝试以下 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
第二个解决方案 再添加 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
OR 在以上版本中使用三元运算符条件小调整:
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
https://stackoverflow.com/questions/73523467/