我需要从网址列表中检索文字 我有带ID和URL的csv(大约150 000行)。在此URL上只是没有HTML代码的纯文本 我需要将这个文本写入带输入csv的ID的csv 这可能与wget有关吗?
输入CSV
9788075020536 | http://pemic-books.cz/ASPX/Annotation.aspx?kod=0180853
输出CSV
9788075020536 |UčebnicejedílemkorktivuautorůkatedryústavníhoprávaPrávnickéfakultyUniverzity Karlovy v Prazeexterníchspolupracovníků。 V souladustradičnímpojetímústavníhoprávajeobecnástátovědopodávánajakojehovstupníneododělitelnásoučást。 Kniha jereprintempůvodníhovydánízroku 1998,vnakladatelstvíLegesvycházípoprvé。 NaučebnicinavazujeÚstavníprávoastátověda,2.díl,ÚstavníprávoČeskérepubliky,kterýbylvydánínakladatelstvímLegesv roce 2011
答案 0 :(得分:0)
假设您有以下列
curlcsv文件内容:
0001|columnbefore1|https://www.random.org/integers/?num=1&min=1&max=2&col=1&base=10&format=plain&rnd=new|columnafter1
0002|columnbefore2|https://www.random.org/integers/?num=1&min=3&max=4&col=1&base=10&format=plain&rnd=new|columnafter2
0003|columnbefore3|https://www.random.org/integers/?num=1&min=5&max=6&col=1&base=10&format=plain&rnd=new|columnafter3
以下是您可以使用的“单行”:
gawk ' {
match($0, /^(([^|]+[|]){2})([^|]+)([|][^|]+)*$/, arr);
req = "curl -s \""arr[3]"\"";
req | getline res;
print arr[1]""res""arr[4];
}
' curlcsv >result
/^(([^|]+[|]){2})
- 2这里意味着跳过2列(在您的情况下跳过1列)
([^|]+)
- 获取网址列的内容
([|][^|]+)*
- 保存其余列值
结果文件如下所示:
0001|columnbefore1|2|columnafter1
0002|columnbefore2|3|columnafter2
0003|columnbefore3|5|columnafter3
这种方法会对打开的文件造成限制(参见下面的JaromírHeimlich评论)
解决这个限制问题的方法可能是:split -l 100 curlcsv && ls | grep -v curlcsv | xargs -n 1 gawk ' {
match($0, /^(([^|]+[|]){2})([^|]+)([|][^|]+)*$/, arr);
req = "curl -s \""arr[3]"\"";
req | getline res;
print arr[1]""res""arr[4];
}
' >>../result
将curlcsv放到空文件夹中,因为split
会在该目录中创建大量部分列表。
cat curlcsv | sed -e 's/^\(\([^|]\+[|]\)\{2\}\)\([^|]\+\)\([|][^|]\+\)*$/echo "\1"$(curl -s "\3")"\4"/' | bash >result
/^(([^|]+[|]){2})
- 2这里意味着跳过2列(在您的情况下跳过1列)
在这个例子中,sed构造了bash脚本以获得结果。
由于此解决方案生成bash命令,因此没有gawk解决方案的限制问题。