gpt4 book ai didi

regex - 使用 awk 替换大文件中每行的开始和结束

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:06 25 4
gpt4 key购买 nike

我有一系列大型 (25-250MB) 制表符分隔的文本文件,我需要将其转换为 SQL 格式以进行批量插入。我对 awk 非常陌生,所以我不知道自己在做什么。我所知道的是我需要解决方案来在尽可能短的时间内处理数据。结果,我的尝试是无力的。我试图通过使用 sed(总集群)和 awk 在每个文件上进行三个单独的传递来实现以下目标;像这样...

第 1 遍:awk '{gsub(/%J\t/,"\(\'")}1' file.txt

第 2 遍:awk '{gsub(/\n,"\'\)\n")}1' file.txt

第 3 步:awk '{gsub(/\t/,"\',\'")}1' file.txt

由于我严重缺乏使用 awk 的经验,当我尝试上述操作时,终端会切换到一个新的提示符,就像它在等待更多信息而不是执行命令一样。

这是整个文件中数据格式的示例。

每一行的结构如下:

%J\t数据\t数据\t数据\t数据\t数据\n

我想使用 awk 或类似的工具将每一行重组为以下格式:

('DATA','DATA','DATA','DATA','DATA',@id)\n

注意:如果我的格式不正确,我深表歉意。这是我在 Stack 上的第一篇文章。

提前感谢大家抽出宝贵时间帮助完成这件事!

最佳答案

像这样的东西应该可以解决问题:

awk -F"\t" -v q="'" '{printf "("}{for (i=2;i<=NF;i++){printf "%s\t", q $i q}}{print "@id)"}'

这是说:

  1. 按制表符拆分每条记录 -F"\t"
  2. 设置变量q单引号:-v q="'"
  3. 打印出起始括号'{printf "("}
  4. 从第 2 列开始遍历记录中的每一列 for (i=2;i<=NF;i++)
  5. 打印列,然后用单引号将列括起来(使用变量):printf "%s\t", q $i q
  6. 最后打印出文字 @id后跟使用 print 的右括号命令,以便它在打印结束时弹出一个回车符:print NR")"


:~> cat testfile
%J D1 D2 D3
%J D2 D3 D4
:~> awk -F"\t" -v q="'" '{printf "("}{for (i=2;i<=NF;i++){printf "%s\t", q $i q}}{print "@id)"}' testfile
('D1' 'D2' 'D3' @id)
('D2' 'D3' 'D4' @id)

关于regex - 使用 awk 替换大文件中每行的开始和结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48906848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com