在 Bash 脚本中使用 Gawk 和 Printf
Using Gawk and Printf in a Bash script
我正在尝试使用 gawk 将文件分成较小的文件,并按原始文件的顺序重命名较小的文件。
for i in *.txt
do
gawk -v RS="START_of_LINE_to_SEPARATE" 'NF{ print RS[=11=] > "new_file_"++n".txt"}' $i
done
输出给我:new_file_1.txt new_file_2.txt 等...
我希望输出为:new_file_0001.txt new_file_0002.txt 等...
你可以这样做:
for i in *.txt; do
printf -v num "%04d" $((++n))
gawk -v num="$num" -v RS="START_of_LINE_to_SEPARATE" 'NF{
print RS[=10=] > "new_file_" num ".txt"}' "$i"
done
忽略外循环的问题,关注问题的 awk 部分,您可以使用 sprintf
生成您的文件名:
gawk -v RS="START_of_LINE_to_SEPARATE" 'NF{ file = sprintf("new_file_%04d.txt", ++n)
print RS[=10=] > file }' "$i"
格式说明符 %04d
表示该数字是一个数字,用前导零填充到长度 4。
如果您想遍历所有 .txt 文件并继续递增计数器,那么您可以通过将 "$i"
更改为 [=14= 来摆脱循环并立即将它们全部传递给 awk ].
我正在尝试使用 gawk 将文件分成较小的文件,并按原始文件的顺序重命名较小的文件。
for i in *.txt
do
gawk -v RS="START_of_LINE_to_SEPARATE" 'NF{ print RS[=11=] > "new_file_"++n".txt"}' $i
done
输出给我:new_file_1.txt new_file_2.txt 等...
我希望输出为:new_file_0001.txt new_file_0002.txt 等...
你可以这样做:
for i in *.txt; do
printf -v num "%04d" $((++n))
gawk -v num="$num" -v RS="START_of_LINE_to_SEPARATE" 'NF{
print RS[=10=] > "new_file_" num ".txt"}' "$i"
done
忽略外循环的问题,关注问题的 awk 部分,您可以使用 sprintf
生成您的文件名:
gawk -v RS="START_of_LINE_to_SEPARATE" 'NF{ file = sprintf("new_file_%04d.txt", ++n)
print RS[=10=] > file }' "$i"
格式说明符 %04d
表示该数字是一个数字,用前导零填充到长度 4。
如果您想遍历所有 .txt 文件并继续递增计数器,那么您可以通过将 "$i"
更改为 [=14= 来摆脱循环并立即将它们全部传递给 awk ].