像“column -t”这样的命令但与编码类型无关?

像“column -t”这样的命令但与编码类型无关?

本质上,我正在寻找column -tLinux 中该命令的编码类型不可知版本。

我需要将分隔文件转换为平面文件,然后写入输出文件。具体分隔符各不相同 (, | \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 与编码类型无关吗?

相关内容