gpt4 book ai didi

linux - 在 UNIX 中删除 CSV 文件中字段之间的空格

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:14 25 4
gpt4 key购买 nike

CSV 输入文件:

"18","Agent","To identify^M
","b5b553d2-81ab-4ec3-83e0-71ae3cf4afab","1"^M
"1078","Repeat","Identify
it has","0164f3eb-beeb-47dd-b9b9-9b762f430e14","1"^M
"621","Com Dot Com","Identify

","7fc9e73e-3470-4b31-8524-fcb97a4dadee","1"^M

在上面的输入文件中,我有 3 种不同类型的记录。

1) 第 18 条记录(前 2 行),即使它应该是一行,但它却变成了 2 行。 ^M 错误地放置在第一行的末尾。

预期输出(^M 从第一行删除并成为一行)

"18","Agent","To identify","b5b553d2-81ab-4ec3-83e0-71ae3cf4afab","1"^M

2) 第 1078 号记录(第 3 和 4 行)- 这里我在第 3 行末尾没有 ^M。我想合并第 3 和 4 行并使其成为一行。

预期输出

"1078","Repeat","Identify it has ","0164f3eb-beeb-47dd-b9b99b762f430e14","1"^M

3) 621 号记录(第 4、5 和 6 行)- ^M 仅在行尾,但中间有一个空行。我想删除空行并使其成为一行。

预期输出

"621","Com Dot Com","Identify","7fc9e73e-3470-4b31 8524fcb97a4dadee","1"^M

最佳答案

使用 ruby :

ruby -e 'require "csv"; CSV.parse(File.read(ARGV.shift)).each{ |e| e.map!{ |f| f.strip.gsub(/[[:space:]]+/, " ") }; puts CSV.generate_line(e, {:force_quotes => true}); }' csv_file

输出:

"18","Agent","To identify","b5b553d2-81ab-4ec3-83e0-71ae3cf4afab","1"
"1078","Repeat","Identify it has","0164f3eb-beeb-47dd-b9b9-9b762f430e14","1"
"621","Com Dot Com","Identify","7fc9e73e-3470-4b31-8524-fcb97a4dadee","1"

更具可读性的形式:

ruby -e 'require "csv"
CSV.parse(File.read(ARGV.shift)).each{ |e|
e.map!{ |f|
f.strip.gsub(/[[:space:]]+/, " ")
}
puts CSV.generate_line(e, {:force_quotes => true})
}' csv_file
  • Bash 的历史扩展可能会影响命令,因此您可以根据需要禁用它:shopt -u -o histexpand

脚本版本:

#!/usr/bin/env ruby
require 'csv'
CSV.parse(File.read(ARGV.shift)).each{ |e|
e.map!{ |f|
f.strip.gsub(/[[:space:]]+/, " ")
}
puts CSV.generate_line(e, {:force_quotes => true})
}

运行

ruby script.rb csv_file

参见 Ruby-Doc.org对于一切。

关于linux - 在 UNIX 中删除 CSV 文件中字段之间的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24689495/

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