【问题标题】:awk script adjusting formatawk脚本调整格式
【发布时间】:2012-03-08 03:48:07
【问题描述】:

我正在尝试使用以下 awk 脚本从名为 file.txt 的文件中计算 每 1000 个 记录并将这些记录括在括号中

file.txt 的内容

12345

23456

43567

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

输出

(12345 23456 43567)

我需要将此输出与 mysql 批量删除语句 相关联,例如以下

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

非常感谢您的帮助!

【问题讨论】:

  • +1 表示好的问题陈述、示例输入、预期输出和一些代码!祝你好运。

标签: mysql bash shell scripting awk


【解决方案1】:

您只能使用 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 仅用于测试,即这是它产生的:

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

【讨论】:

  • 我想我需要 100 年才能成为今天的你!感谢您的帮助!你摇滚!!
  • 嘿,现在我感觉自己像个外星人 :)(我不是,侦察兵的荣誉!)xkcd.com/718 无论如何,很高兴它对你有用!
猜你喜欢
  • 2022-01-22
  • 2021-10-19
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 2012-05-30
相关资源
最近更新 更多