Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash awk将提取的前缀从文件添加到文件名_Bash_Awk - Fatal编程技术网

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

Bash awk将提取的前缀从文件添加到文件名,bash,awk,Bash,Awk,下面的awk按原样执行,但它重命名每个匹配文件中与$p(从每个文本文件中提取)匹配的字段,而不是向目录中的每个文件名添加前缀$x。每个$x后面都有一个\u文件名。我可以在echo$p中看到在$2的查找中使用的正确值被提取出来,但目录中的每个文件都没有改变。并非重命名中的每个文件都将位于目录中,但它始终与$p匹配。也许有更好的方法,因为我不确定自己做错了什么。谢谢:) 重命名选项卡已删除 00-0000 File-01 00-0001 File-02 00-0002 Fil

下面的
awk
按原样执行,但它重命名每个匹配文件中与
$p
(从每个文本文件中提取)匹配的字段,而不是向目录中的每个文件名添加前缀
$x
。每个
$x
后面都有一个
\u
文件名。我可以在
echo$p
中看到在
$2
的查找中使用的正确值被提取出来,但目录中的每个文件都没有改变。并非
重命名
中的每个文件都将位于目录中,但它始终与
$p
匹配。也许有更好的方法,因为我不确定自己做错了什么。谢谢:)

重命名
选项卡已删除

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

File-01_xxxx.txt
文件2

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
此脚本:

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

您可以使用
done
cat rename\u map.txt>将文件用作输入,而

我认为示例文件名“\u”和“-”值不一致。此外,如果您不更改文件的内容,
awk
可能不是您的最佳选择。如果文件为空,也会失败。文件名中有多个
-
连字符,但只有一个
下划线。这是旧文件的命名约定,所以我保留它。每个文件中都有数据。也许
sed
是一个更好的选择?谢谢:)。
File-02-yyyy.txt
不符合要求,除非是打字错误。您不需要读取文件(
awk
sed
不需要),这里
bash
编程可能是更好的选择:
mv$path/$f$path/$prefix\uuf
。按文件名从映射中查找前缀
${f%\u*}
这是一个输入错误,已更正…抱歉,我将尝试一下:)。名为
重命名的文件的目的是什么?
?为什么不只是从以前的数字减去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