小编jon*_*jon的帖子

uniq 忽略一列的 csv 文件,也许是 awk?

鉴于此文件(注释不是文件的一部分,而是构成解释的一部分)...

x,a,001,b,c,d,y
x,a,002,b,c,e,yy
x,bb,003,b,d,e,y
x,c,004,b,d,e,y
x,c,005,b,d,e,y   # nb - dupe of row 4
x,dd,006,b,d,e,y
x,c,007,b,d,e,y   # nb - dupe of row 4 and 5
x,dd,008,b,d,f,y
x,dd,009,b,d,e,y   # nb - dupe of row 6
x,e,010,b,d,f,y
Run Code Online (Sandbox Code Playgroud)

...我想得出以下输出:

x,a,001,b,c,d,y
x,a,002,b,c,e,yy
x,bb,003,b,d,e,y
x,c,004,b,d,e,y
x,dd,006,b,d,e,y
x,dd,008,b,d,f,y
x,e,010,b,d,f,y
Run Code Online (Sandbox Code Playgroud)

如果从文件中删除第 3 列,然后在文件上运行 uniq,那么如果剩余的行在正确的位置重新添加了第 3 列的值,那么我将得到上述结果。

但我真的很挣扎,想出一些可以做到这一点的东西。我很高兴有机会了解 linux 的文本处理实用程序。

性能:文件看起来不太可能增长到超过 1MB,而且每天只有 1 个文件。

目标:Debian GNU/Linux 7 amd64,256MB/至强。

编辑:调整示例,因为字段不是固定宽度,uniq --skip-chars=n据我所知,涉及的解决方案将不起作用。

awk text-processing sort csv

7
推荐指数
2
解决办法
3034
查看次数

获取目录中所有文件的一致编码

我有一个目录,其中包含来自不同供应商的大量具有两种不同编码的 csv 文件:

  • ASCII 文本 / UTF-8
  • UCS2 / UTF-16 小端

我想使用传统语法在这些数据文件上使用 grep、awk、sed 和其他实用程序。

将这些文件从 UTF-16 重新编码为 UTF-8 不会丢失任何有用的数据。所有 csv 文件只包含 ASCII 数据,所以我无法理解为什么某些供应商有时将它们作为小端 UTF-16 提供。

我写了一个简短的脚本来解析 的输出file,但我认为它可能非常脆弱。

必须有更好的方法来管理具有多种编码的文件,是否有任何程序或实用程序可以帮助解决此类问题?

我正在使用 Debian 稳定版。

for f in ./*.csv
do
  if  [[ $(file "$f") == *"UTF-16"* ]]
  then
    iconv -f UTF-16 -t UTF-8 "$f" > "$f"-new
    mv "$f"-new "$f"
  fi
done
Run Code Online (Sandbox Code Playgroud)

character-encoding files

5
推荐指数
1
解决办法
594
查看次数

标签 统计

awk ×1

character-encoding ×1

csv ×1

files ×1

sort ×1

text-processing ×1