2012-03-08 65 views
2

我尝试使用以下awk脚本来算从文件名为file.txt每1000个记录和括号括之间的那些记录awk脚本调整格式

file.txt的内容

awk '{ printf $0 " " } NR%1000 == 0 { print "" }' file.txt | sed 's/.*/(&)/' 

输出

(12345 23456 43567) 

我需要assotciate此输出与MySQL的批量删除语句下面

Delete from ReportingDetail where ReportingDetailID IN (12345,23456,43567); 
  1. 我无法添加“从ReportingDetail删除此类其中 ReportingDetailID IN“到每一行的结尾。
  2. 我无法在记录之间添加“,”。

您的帮助非常感谢!

+0

+1好的问题声明,示例输入,预期输出和一些代码!祝你好运。 – shellter 2012-03-08 04:02:45

回答

2

你只能使用sed做到这一点:

sed -e 's/ /,/g' -e 's/^/Delete from ReportingDetail where ReportingDetailID IN (/' -e 's/$/)/' file.txt 

如:

$ echo "1 2 3"|sed -e 's/ /,/g' -e 's/^/Delete from ReportingDetail where ReportingDetailID IN (/' -e 's/$/)/' 
Delete from ReportingDetail where ReportingDetailID IN (1,2,3) 

编辑 - 为您的更新(即当你在不同线路上的数字),只是在前面加上你已经有什么:

awk '{ printf $0 " " } NR%1000 == 0 { print "" }' file.txt | sed -e 's/ /,/g' -e 's/^/Delete from ReportingDetail where ReportingDetailID IN (/' -e 's/,$/)/' 

如:

$ echo -e "1\n2\n3"|awk '{ printf $0 " " } NR%1000 == 0 { print "" }'|sed -e 's/ /,/g' -e 's/^/Delete from ReportingDetail where ReportingDetailID IN (/' -e 's/,$/)/' 
Delete from ReportingDetail where ReportingDetailID IN (1,2,3) 

你也可以做,如果没有这样的AWK:

$ echo -e "1\n2\n3\n4"|tr "\n" " "|sed -e 's/ /,/g' -e 's/^/Delete from ReportingDetail where ReportingDetailID IN (/' -e 's/,$/)/' 
Delete from ReportingDetail where ReportingDetailID IN (1,2,3,4) 

注意我使用的回声只是为了测试,即这是它产生:

$ echo -e "1\n2\n3\n4" 
1 
2 
3 
4 
+0

我想这将需要我100年才能得到你今天的样子!谢谢你的帮助!你摇滚! – Deano 2012-03-08 04:10:29

+0

呵呵,现在我感觉像某种外星人:)(我不是,侦察员的荣誉!)http://xkcd.com/718/无论如何,很高兴它为你工作! – 2012-03-08 04:19:26

+0

哈哈保持良好的工作!谢谢你来这里! – Deano 2012-03-08 05:24:26