将 CSV 文件中的数字转换为其对应的 URL

Mon*_*lal 3 command-line csv text-processing

我有一个包含两列(和一个标题)的 CSV 文件,其中每个元素都包含 0 到 199 之间的任意数字。我想将它们转换为相应的 URL。下面是一个例子:

41,51
Run Code Online (Sandbox Code Playgroud)

应该变成:

http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/41.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/51.jpg
Run Code Online (Sandbox Code Playgroud)

这是我要转换的 list.csv 文件:

$ head list.csv
imageA,imageB
41,51
172,100
99,149
83,72
84,160
186,8
93,198
150,21
63,102
Run Code Online (Sandbox Code Playgroud)

pa4*_*080 7

使用sed

sed -r 's#^([0-9]+),([0-9]+)$#http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/\1\.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/\2\.jpg#' input-file
Run Code Online (Sandbox Code Playgroud)
  • 将输出重定向到一个新文件> output-file;或使用该选项-i.bak在其位置进行更改并创建备份文件。
  • -r, --regexp-extended- 在脚本中使用扩展的正则表达式。
  • 命令的s意思是替代:#<string-or-regexp>#<replacement>#
  • #用作分隔符 - 通常/扮演这个角色,但这里我们在 中有很多斜杠<replacement>,因此我们不需要对每个斜杠进行转义。
  • ^将匹配到行的开头。$将匹配到行尾。
  • [0-9]+ 将匹配每个由数字组成的字符串。
  • 在 中<replacement>,捕获组([0-9]+)将被视为变量\1\2
  • \. 只是逃避了点的特殊含义。

这是@dessert提出的简化:

sed -r 's#([0-9]+)#http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/\1\.jpg#g' input-file
Run Code Online (Sandbox Code Playgroud)
  • 这里我们假设文件格式是同构的,就像示例中那样,我们不需要匹配整行。
  • g标志(在结束时)将重复匹配正则表达式的每个出现的线的端部的替代。

此外,还可以将变量用于基本 URL 和文件扩展名:

URL='http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/'; EXT='.jpg'
sed -r "s#([0-9]+)#$URL\1$EXT#g" input-file
Run Code Online (Sandbox Code Playgroud)
  • 注意:这里使用双引号。


ste*_*ver 6

我可能会使用awk例如

awk -F, -v baseurl='http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/' '
  FNR>1 {printf("%s%d.jpg,%s%d.jpg\n", baseurl, $1, baseurl, $2)}
' list.csv
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/0.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/0.jpg
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/41.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/51.jpg
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/172.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/100.jpg
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/99.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/149.jpg
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/83.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/72.jpg
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/84.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/160.jpg
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/186.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/8.jpg
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/93.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/198.jpg
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/150.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/21.jpg
http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/63.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/102.jpg
Run Code Online (Sandbox Code Playgroud)