我正在尝试使用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等...
答案 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。