Linux命令布局选项卡分隔列表很好

时间:2013-06-03 09:27:27

标签: linux perl sed awk

我想生成一个包含制表符分隔列的日志文件。它应具有以下格式,除了注释字段

之外的所有选项卡都有制表符分隔输出
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 个答案:

答案 0 :(得分:2)

由于您的评论位于最后一栏,请尝试使用paste。例如:

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

默认情况下,paste也会加入标签字符。

答案 1 :(得分: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

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

答案 2 :(得分: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