找到第一行的第一个数值并将其插入第二行的末尾,对同一目录中的多个文件执行此操作



我在一个唯一的目录中有多个文件要处理。它们共享相同的扩展名(.dat(,但它们的名称可以是任何名称。每个文件都有一个由随机文本组成的第一行,其中第一个遇到的数值必须被捕获,然后放在第二行的末尾。之后还有许多其他线路。

字段的第一行和第二行数未知,因为数值在第一行中的位置。第一行还可以包括几个数值。

目前的例子是,'xxx.dat'中有'850',文件如下:

典型输入:

field11 field21 ... 850 ... 520 ... blabla ... 1100 ... fieldi1
field12 field22 ... fieldj2
field13 field23 ... fieldk3
...
field1n field2n ... fieldzn

所需输出:

field11 field21 ... 850 ... 520 ... blabla ... 1100 ... fieldi1
field12 field22 ... fieldj2 850
field13 field23 ... fieldk3
...
field1n field2n ... fieldzn

理想情况下,一个唯一的命令或循环将处理所有.dat文件。

我是sed和awk的初学者,不幸的是,我还远远不能解决这个问题。请给我一些建议或解决方案好吗?谢谢

您可以使用以下shell脚本:

#!/bin/sh
# make a temp file
trap "rm -f '$tmp'; exit" INT TERM
if command -v mktemp 2>&1 >/dev/null; then
tmp=$(mktemp)
else
tmp=edit.tmp
fi
[ -e "$tmp" ] && exit 1
# edit .dat files
for i in *.dat; do
awk '
NR==1 {while ($(++i) ~ /[^0-9]/); num=$i}
NR==2 {print $0,num}
NR!=2' "$i" > "$tmp"  &&
mv "$tmp" "$i"
done
rm -f "$tmp"

它获取第1行中的第一个仅限数字的字段,并将其附加到第2行。

在只包含要编辑的.dat的目录中运行。

说明您的目标操作系统平台有很大帮助。

最新更新