发出格式化文件bash

时间:2015-07-07 06:08:17

标签: bash awk

我有一个像这样的文件(out.txt):

fileOne.txt 100 ascii
fileTwo.txt 200 ascii
test        90  other

我想创建另一个这样的文件:

Filename    Size  Type
fileOne.txt 100   ascii
fileTwo.txt 200   ascii
test        90    other

因为我使用了gawk命令,我的awk文件是这样的:

BEGIN {
         print "-----------------------------------------------------\n"
         print "   Report files in directory\n\n"
         printf "\t%s\t\t%s\t\t%s\n","File Name","Size","Type"
}
   {  
     printf "\t%s\t\t%s\t\t%d\n",$1,$2,$3

}

它对我有用,但我的问题是: 如果有一个长名称的文件,它的名字也会出现在type列中,而size值会在size列下面打印出来,我得到一个东西:

Filename    Type  Size
fileWithLongName.txt ascii   100
fileTwo.txt ascii 200
test        other    90

1 个答案:

答案 0 :(得分:2)

如果您可以使用临时文件:

YOUR_AWK_SCRIPT_ABOVE | column -t > temp && mv temp ORIGINAL_FILENAME
默认情况下,

column -t是按空格分隔列。要指定一组字符来分隔列,请-s选项。

您可以使用:

#name:script.awk
BEGIN{
    printf "%s\t%s\t%s\n","File Name","Size","Type"
}
{
    printf "%s\t%s\t%d\n",$1,$2,$3
}

然后:

awk -f script.awk INPUT_FILENAME | column -s $'\t' -t > temp && mv temp INPUT_FILENAME

您可以添加:

print "-----------------------------------------------------\n"
print "   Report files in directory\n\n"
完成上述命令后

行。