【发布时间】:2021-08-22 20:39:13
【问题描述】:
专家,我在一个目录中有很多文件,这些文件包含一些数字。
【问题讨论】:
-
鉴于所有因信息不足而受到抨击的问题,我无法相信这有多个答案。请阅读How to Ask。
标签: linux bash shell for-loop awk
专家,我在一个目录中有很多文件,这些文件包含一些数字。
【问题讨论】:
标签: linux bash shell for-loop awk
可能不兼容 POSIX;在 Bash 5.0 上测试。假设文件名不包含空格且长度固定。
for file_with_a in *A.??
do
target_left=${file_with_a:0:15} # e.g., 2019__01_NDV.NT
target_right=${file_with_a:16:3} # e.g., .AS
cat $target_left[A-C]$target_right > ${target_left}_ABC$target_right
done
【讨论】:
mapfile aka readarray 是一个 bash4+ 功能。
#!/usr/bin/env bash
files=([0-9][0-9][0-9][0-9]__*[ABC]*.??)
while mapfile -d '' -n3 array && ((${#array[*]} == 3)); do
if [[ ${array[0]%%_*} == ${array[1]%%_*} && ${array[0]%%_*} == ${array[2]%%_*} ]]; then
paste "${array[0]}" "${array[1]}" "${array[2]}" > "${array[0]%${array[0]:(-4)}}_ABC.${array[0]:(-2)}"
fi
done < <(printf '%s\0' "${files[@]}")
【讨论】: