【问题标题】:paste data based on certain condition [closed]根据特定条件粘贴数据[关闭]
【发布时间】:2021-08-22 20:39:13
【问题描述】:

专家,我在一个目录中有很多文件,这些文件包含一些数字。

【问题讨论】:

  • 鉴于所有因信息不足而受到抨击的问题,我无法相信这有多个答案。请阅读How to Ask

标签: linux bash shell for-loop awk


【解决方案1】:

可能不兼容 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

【讨论】:

  • 您肯定希望将其复制/粘贴到 shellcheck.net 并修复它告诉您的问题。
【解决方案2】:

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[@]}")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2021-11-26
    • 2019-01-01
    相关资源
    最近更新 更多