在科研工作中常常需要处理大量文本数据,Windows 下的 bat 脚本语法并不那么简单易学,所以打算在博客中更新一些常用的脚本以供借鉴。

比如现在我有 100 个 txt 文件,里面的内容都是

123
456
789

现在想把所有的 txt 文本内容整合到一个文本文件中。利用 type *.txt > result.dat 命令后发现结果有时并不那么如意

result.dat
123
456
789123
456
789

这是因为 type 命令只是将各个文本直接连在一起而并没有自动添加换行。

可以稍微修改一下命令来达到目的

@echo off
for %%i in (*.txt) do type %%i >>result.dat  &&  echo. >> result.dat

问题难度提升,现在有很多个类似 L13056H00.txt 这种命名格式(2013 年第 56 天 00 时)的 TEC 数据文件,想要把每个文件第 5 行开始第 1,2,6 列提取出来单独绘图

setlocal enabledelayedexpansion
for /f %%i in ('dir /s/b "..\*.txt"') do (
set R=-R70/140/15/55
set J=-JM8i
gmtset BASEMAP_TYPE plain
gmtset TICK_LENGTH 0
gmtset HEADER_FONT 0 HEADER_FONT_SIZE 18 ANNOT_FONT_SIZE 16
set file=%%i
echo !file!
set PS=!file:~-13,9!.ps
gawk "{if (NR>4) print $1,$2,$6}" !file! > data.txt
surface !R! -I0.25 data.txt -Gdata.grd
rem makecpt -Crainbow -T-18/18/5 -Z > cpt
grdimage data.grd -Ccpt !R! !J! -K > !PS!
psscale -Ccpt -D8.7/2.9/5.7/0.2 -B5 -K -O >> !PS!
psbasemap -R -J -B10/5:."@~D@~VTEC Map ( !file:~-13,9! )": -K -O >> !PS!
psxy CHINA.xyz -R -J -W0.5p,black -M -K -O >> !PS!
psxy 震中经纬度.dat -R -J -Sa0.3 -Gblack -W0.5p,black -O >> !PS! 
ps2raster !PS! -Tj -P -C-sFONTPATH=C:/Windows/fonts
del .gmt* data.txt inter.xyz data.grd 
) 

效果如下:

L13056H00.jpg

利用 convert 命令将这一天的 jpg 制作成动态图,效果如下:

convert -delay 20  L13056*.jpg -loop 0  L13056.gif

L13056.gif