在Bash脚本中使用Gawk和Printf

时间:2015-06-09 22:08:33

标签: bash scripting printf file-handling gawk

我正在尝试使用gawk将文件分成较小的文件,并从原始文件中按顺序重命名较小的文件。

for i in *.txt 
do
gawk -v RS="START_of_LINE_to_SEPARATE" 'NF{ print RS$0 > "new_file_"++n".txt"}' $i
done

输出给了我:new_file_1.txt new_file_2.txt ect ...

我希望输出为:new_file_0001.txt new_file_0002.txt等...

2 个答案:

答案 0 :(得分:1)

你可以这样做:

for i in *.txt; do 
    printf -v num "%04d" $((++n))
    gawk -v num="$num" -v RS="START_of_LINE_to_SEPARATE" 'NF{
       print RS$0 > "new_file_" num ".txt"}' "$i"
done

答案 1 :(得分:1)

忽略外部循环的问题并关注问题的awk部分,您可以使用sprintf来生成文件名:

gawk -v RS="START_of_LINE_to_SEPARATE" 'NF{ file = sprintf("new_file_%04d.txt", ++n) 
                                            print RS$0 > file }' "$i"

格式说明符%04d表示该数字是一个数字,填充到长度为4的前导零。

如果你想浏览所有.txt文件并继续递增计数器,那么你可以通过将"$i"更改为*.txt来摆脱循环并将它们全部传递给awk。