本质上,我正在寻找column -t
Linux 中该命令的编码类型不可知版本。
我需要将分隔文件转换为平面文件,然后写入输出文件。具体分隔符各不相同 (, | \t)。
有时(但并非总是),字段包含带有变音符号的文本字符。由于column -t
仅与 UTF-8 编码类型兼容,因此它会被这些“有趣”的字符窒息:
我尝试使用诸如file -bi
确定编码类型之类的命令,以便我可以重新编码为 UTF-8,但它们仅提供“最佳猜测”(当变音符号从第 100,000 行开始时,该猜测会失败。)
到目前为止,我遇到过以下情况:
该脚本将awk
分隔列转换为固定长度列,但我需要可变列宽:
$ awk -F@ '{for(i=1;i<=NF;i++){printf "%-20s", $i};printf "\n"}' input.csv
该脚本perl
查找每列的最大长度并将每列设置为最大长度,但我还需要可变的列数:
perl -F'\t' -lane '
BEGIN {
open I, "< inputfile";
for (<I>) {
chomp;
@x = split /\t/;
(length ($x[0]) > $f0) && ($f0 = length ($x[0]) + 1);
(length ($x[1]) > $f1) && ($f1 = length ($x[1]) + 1);
(length ($x[2]) > $f2) && ($f2 = length ($x[2]) + 1);
}
close I;
}
print "$F[0]" . " " x ($f0 - length ($F[0])), "$F[1]" . " " x ($f1 - length ($F[1])), "$F[2]" . " " x ($f2 - length ($F[2]));
' inputfile
有没有人有一个脚本:
可以在shell中执行
做什么
column -t
(处理不同的列宽,处理不同的列数,允许您指定分隔符)AND 与编码类型无关吗?