我想生成一个包含制表符分隔列的日志文件。它应具有以下格式,除了注释字段
之外的所有选项卡都有制表符分隔输出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
我几乎得到了我想要的东西。但是,我的注释字段中的空格也会更改为制表符。有没有办法可以将前三个字段分开,但在评论字段中保持空格分隔?
答案 0 :(得分:2)
由于您的评论位于最后一栏,请尝试使用paste
。例如:
paste <(echo -e "this\tis\ttab\tseparated") <(echo "this is your comment")
默认情况下,paste
也会加入标签字符。
答案 1 :(得分:2)
一种选择是使用awk完成所有工作:
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