我要做的是从第一列中的每一行复制第一次数据,并将其放到创建的最后一列的超链接中
这是我每天得到的文件的一个例子。让我们调用这个文件input.csv,我想将它转换为output.csv
每天的行数各不相同。
INPUT.CSV
number|name|age|gender
B24|mike|22|male
B65|john|45|male
B74|jane|29|female这就是我想要的样子:
OUTPUT.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>为了使它更整洁,我把一些变量放在了适当的位置。
test.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>感谢你的帮助!
发布于 2022-08-29 01:57:37
第一种解决方案:和您的示例一起使用,请尝试遵循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代码变体,其中设置了具有<a href=https://www.abcdef.com/query=值的变量firstHeader,以备将来需要修改时,不必更改主程序。
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在上述版本中,或使用三元操作符条件很少调整:
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发布于 2022-08-29 02:28:21
这个sed应该适用于您:
sed -E '1s/$/|website/; 1!s~^([^|]+).*~&|<a href=https://www.abcdef.com/query=\1>\1</a>~' file
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>发布于 2022-08-29 08:02:23
我将利用GNU AWK来完成以下任务,让file.txt内容成为
number|name|age|gender
B24|mike|22|male
B65|john|45|male
B74|jane|29|female然后
awk 'BEGIN{FS=OFS="|"}NR==1{print $0,"website";next}{printf "%s|<a href=https://www.abcdef.com/query=%s>%s</a>\n", $0, $1, $1}' file.txt给予输出
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>说明:我通知GNU AWK,管道字符(|)既是字段分隔符(FS),也是输出字段分隔符(OFS)。对于第一行,我打印行(后面是website ),对于所有其他行,我使用printf与字符串一起填充,三个位置由%s表示:第一个用于已存在字段,第二个用于查询值,第三个用于a标记文本,使用整个使用行as原样($0)和第一个字段($1)和第一个字段($1)填充。请注意,我的换行符(\n)在末尾,因为printf没有提供它。
(在gawk 4.2.1中测试)
https://stackoverflow.com/questions/73523467
复制相似问题