我在Excel电子表格中发送了一个大的URL列表,每个URL都根据字符串中的某个get变量而唯一(其值是5-7个数字的长度)。我不得不根据这些数字在我们的数据库上运行一些查询,并且不想经历数百个逐个清除数字的条目。什么BASH命令可用于解析每一行中的数字(它是每行中唯一的数字)并将其合并为包含所有数字的一行,逗号分隔?
CVS电子表格的示例(缩短)列表包括:
http://www.domain.com/view.php?fDocumentId=123456
http://www.domain.com/view.php?fDocumentId=223456
http://www.domain.com/view.php?fDocumentId=323456
http://www.domain.com/view.php?fDocumentId=423456
DocumentId=523456
DocumentId=623456
DocumentId=723456
DocumentId=823456
....
...
格式的更改是有意的,因为他们决定在几行之后将其简化为变量名称和值。 get变量从fDocumentId更改为DocumentId也是故意的。理想输出看起来类似于:
123456,23456,323456,423456,523456,623456,723456,823456
编辑:道歉,我没有注意到列表的一半,他们决定变得邋and并改变一切,有条目保存为CSV时,某些行将显示为:
"DocumentId=098765 COMMENT, COMMENT"
DocumentId=898765 COMMENT
DocumentId=798765- COMMENT
"DocumentId=698765- COMMENT, COMMENT"
其他几个条目与上述任何行类似。 COMMENT
可以替换为每个COMMENT
长度不超过3个字符的单个字符串(大写)字符
答案 0 :(得分:2)
假设变量总是在它自己上面,并且最后在线上,那么只需要取=
右侧的任何内容?
sed -r "s/.*=([0-9]+)$/\1/" testdata | paste -sd","
编辑:好的,有了这些新信息,您将需要编辑一下正则表达式:
sed -r "s/.*f?DocumentId=([0-9]+).*/\1/" testdata | paste -sd","
将捕获DocumentId或fDocumentId之后的任何内容。适用于您目前所提供的数据,至少。
答案 1 :(得分:1)
比这更简单:) cat file.csv | cut -d“=” - f 2 | xargs的
答案 2 :(得分:0)
如果你没有完全致力于打击,瑞士陆军电锯将提供帮助:
perl -ne '{$_=~s/.*=//; $_=~s/ .*//; $_=~s/-//; chomp $_ ; print "$_," }' < YOUR_ORIGINAL_FILE
这会削减所有内容,包括=
,然后是空格后的所有内容,然后删除任何破折号。运行上面的输入,它返回
123456,223456,323456,423456,523456,623456,723456,823456,098765,898765,798765,698765,