Csv 制表符分隔文本转换为带边框的表格格式

Csv 制表符分隔文本转换为带边框的表格格式,csv,file-format,tabular,Csv,File Format,Tabular,我需要将制表符分隔的文本文件转换为表格格式,如下所示 文件内容 ID<TAB>WorkId<TAB>Date 0<TAB>W-1230699600000<TAB>2008-12-31 1<TAB>W-1233378000000<TAB>2009-01-31 我最终用awk来做这件事。这就是我所做的 cat /tmp/1.txt | awk -F'\t' ' BEGIN { fieldSize=5; for

我需要将制表符分隔的文本文件转换为表格格式,如下所示

文件内容

ID<TAB>WorkId<TAB>Date
0<TAB>W-1230699600000<TAB>2008-12-31
1<TAB>W-1233378000000<TAB>2009-01-31

我最终用awk来做这件事。这就是我所做的

cat /tmp/1.txt | awk -F'\t' '
BEGIN {
    fieldSize=5;

    for (i=1; i < fieldSize; i++) {
    fLength[i]=0;
    }
}
{
    for (i=1; i <= fieldSize; i++) {
    if (fLength[i] < length($i)) {
            fLength[i] = length($i)
        }

    }
    line[NR]=$0
}
END {
    for (i=1; i <= NR; i++) {
        split(line[i], values, "\t")
        format="| "
        arguments=""
        seperator="+"
        for (j=1; j <= fieldSize; j++) {
        format=format"%-"fLength[j]"s | "
            for (c=0; c <= fLength[j]; c++) seperator=seperator"-"
            seperator=seperator"-+"
            arguments=arguments" \""values[j]"\""
        }

    if (i == 1) print seperator;

        printCommand="printf \""format"\n\" "arguments
        system(printCommand)

    if (i == 1) print seperator;
    }
    print seperator;

}
'
cat/tmp/1.txt | awk-F'\t''
开始{
字段大小=5;
对于(i=1;i
#!/usr/bin/perl
open(MYFILE, ">myfile.txt") or die "File does not exist!";

my $id, $workid, $date;

print MYFILE
"+-----+----------+---------------+\n" .
"|ID   |WorkId    |Date           |\n" .
"+-----+----------+---------------+\n";

format MYFILE =
|@<<<<|@<<<<<<<<<|@<<<<<<<<<<<<<<|
 $id    $workid     $date
+-----+----------+---------------+
.

while(<>)
{
  next if (m/^ID/);
  ($id,$workid,$date) = split(/\t/);
  write MYFILE;
}
!/usr/bin/perl
打开(MYFILE,“>MYFILE.txt”)或死亡“文件不存在!”;
我的$id、$workid、$date;
打印我的文件
“+----+----+----+----+\n”。
“|ID | WorkId | Date | \n”。
“+----+----+----+----+\n”;
格式化我的文件=

|@只是一个小问题-如果它是标签分隔的,它不是CSV。
#!/usr/bin/perl
open(MYFILE, ">myfile.txt") or die "File does not exist!";

my $id, $workid, $date;

print MYFILE
"+-----+----------+---------------+\n" .
"|ID   |WorkId    |Date           |\n" .
"+-----+----------+---------------+\n";

format MYFILE =
|@<<<<|@<<<<<<<<<|@<<<<<<<<<<<<<<|
 $id    $workid     $date
+-----+----------+---------------+
.

while(<>)
{
  next if (m/^ID/);
  ($id,$workid,$date) = split(/\t/);
  write MYFILE;
}