loops - 找到第一行的第一个数值并将其插入到第二行的末尾,对同一目录中的多个文件执行此操作
问题描述
我有多个文件要在一个唯一目录中处理。它们共享相同的扩展名 (.dat),但它们的名称可以是任何名称。每个文件都有一个由随机文本组成的第一行,其中必须捕获第一个遇到的数值,然后将其放在第二行的末尾。然后是许多其他行。
第 1 行和第 2 行的字段数未知,作为数值在第 1 行中的位置。第一行还可以包含多个数值。
这目前看起来像示例,在“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
在仅包含您要编辑的 s的目录中运行。
说出您的目标是哪个操作系统平台很有帮助。
推荐阅读
- ios - 在 MKMapView 中计算方位在穿过 180 经线时给出错误值
- java - 通过 HttpURLConnection 的 JSON POST 数据
- ios - 如何向 AVPlayer 添加叠加层?
- html - 如何使第一个网格项目跨度 100%?
- logout - 客户端 Web 应用程序注销时的 Jasig Cas 票证验证
- angular - 如何避免 mat-tab 延迟加载以重置控件/组件
- java - HTTP 标头结束
- c++ - 如何排序 std::vector 忽略某些数字?
- java - @PathVariable 的自定义参数解析器
- go - ghinstallation 中 GitHub 应用的集成 ID 是什么?