awk将文件中提取的前缀添加到文件名

时间:2018-01-22 19:49:02

标签: bash awk

以下awk按原样执行,但它重命名每个匹配文件中与$p匹配的字段(从每个文本文件中提取),而不是添加$x作为前缀添加(从1美元的重命名)到目录中的每个文件名。每个$x后跟_文件名。我可以在echo $p中看到提取$2的查找中使用的正确值,但目录中的每个文件都保持不变。并非rename中的每个文件都在目录中,但它始终与$p匹配。也许有更好的方法,因为我不确定我做错了什么。谢谢你:)。

重命名 tab-delimeted

00-0000     File-01
00-0001     File-02
00-0002     File-03
00-0003     File-04

文件1

File-01_xxxx.txt

file2的

File-02_yyyy.txt

所需的输出

00-0000_File-01-xxxx.txt
00-0001_File-02-yyyy.txt

的bash

for file1 in /path/to/folders/*.txt
do
# Grab file prefix
  bname=`basename $file1` # strip of path
  p="$(echo $bname|cut -d_ -f1,1)" # remove after second underscore
  echo $p
# add prefix to matching file
  awk -v var="$p" '$2~var{x=$1}(NR=x){print $x"_",$bname}' $file1 rename OFS="\t" > tmp && mv tmp $file1
done

1 个答案:

答案 0 :(得分:1)

这个脚本:

touch File-01-azer.txt
touch File-02-ytrf.txt
touch File-03-fdfd.txt
touch File-04-dfrd.txt

while read p f;
do
    f=$(ls $f*)
    mv ${f} "${p}_${f}"
done << EEE
00-0000    File-01
00-0001    File-02
00-0002    File-03
00-0003    File-04
EEE

ls -1

输出:

00-0000_File-01-azer.txt
00-0001_File-02-ytrf.txt
00-0002_File-03-fdfd.txt
00-0003_File-04-dfrd.txt

您可以使用done < rename_map.txtcat rename_map.txt | while

将文件用作输入