3

我想生成一个带有制表符分隔列的日志文件。它应该具有以下格式,除了注释字段之外的所有内容都带有制表符分隔的输出

time        date        alias   comment
10:09:20    03/06/13    jre     This is a test comment

我将 csh 用于历史目的

set time = `perl -MPOSIX -e 'print POSIX::strftime("%T", localtime)'`
set date = `perl -MPOSIX -e 'print POSIX::strftime("%d/%m/%y", localtime)'`
set alias = jre
set comment = "This is a test comment"

将我的文本传送到 column -t

echo "time\tdate\talias\tcomment" | column -t > somefile
echo "$time\t$date\t$alias\t$comment" | column -t >> tt

我几乎得到了我想要的。但是,我的评论字段中的空格也更改为制表符。有没有办法可以标签分隔前 3 个字段,但在评论字段中保持空格分隔?

4

3 回答 3

2

这可能对您有用:

printf 'Time\tDate\tAlias\tComment\n' > file
printf '%s\t%s\t%s\t%s\n' $(date '+%T') $(date '+%d/%m/%y') jre "This is a comment" >> file
于 2013-06-03T12:40:52.400 回答
2

由于您的评论在最后一列,请尝试使用paste. 例如:

paste <(echo -e "this\tis\ttab\tseparated") <(echo "this is your comment")

默认情况下,paste也加入制表符。

于 2013-06-03T09:37:37.513 回答
2

一种选择是使用完成所有工作:

awk '
    BEGIN {
        OFS = "\t"
        header = "time date alias comment"
        gsub( /\s+/, OFS, header )
        print header

        out[0] = strftime( "%T", systime() )
        out[1] = strftime( "%d/%m/%y", systime() )
        out[2] = "jre"
        out[3] = "This is a test comment"

        l = length( out )
        for ( i = 0; i < l; i++ ) {
            printf "%s%s", out[ i ], i == l ? "" : OFS;
        }
        printf "\n"
    }
'

它产生:

time    date    alias   comment
11:45:00    03/06/13    jre This is a test comment

它不会打印在标题下方,但在这种情况下,最好使用格式化的 print ( printf) 代替。

于 2013-06-03T09:49:35.447 回答