您好我已经问过这个问题,但由于信息充足,它被称为无效。让我再次提出我的问题。
我在Ravi目录中有许多以ECEPYO开头的文件。
基于字符串" BOFA2016ECG"如果字符串存在于文件中,我应该重命名该文件并将其移动到新目录teja。
如果文件中没有该字符串,我需要将其移动到Test文件夹。
我正在使用以下代码
INBOUND=/mnt/data/Ravi/ECEPYO.*
for i in `ls $INBOUND` ;
do
awk '/BOFA2016ECG/{file="/mnt/data/teja/BOFA" ++c ".dat"} {print > file}' $INBOUND
done
rm $INBOUND
当字符串可用时,这工作正常;但是当字符串不可用时,我收到以下错误
awk: cmd. line:1: (FILENAME=/mnt/data/Ravi/ECEPYO.266031 FNR=1) fatal: expression for `>' redirection has null string value
当字符串不可用并将文件移动到不同的文件夹时,我需要一些帮助来开发代码。
以下代码能够解决问题;
INBOUND=/mnt/GXSdata/Ravi/ECEPYO.*
for i in `ls $INBOUND` ;
do
SEARCHSTRING=`grep BOFA2016ECG $INBOUND | cut -c217-227 `
if [ "$SEARCHSTRING" = "BOFA2016ECG" ];
then
awk '/BOFA2016ECG/{file="/mnt/data/teja/BOFA" ++c ".dat"} {print > file}' $INBOUND
else
cp $INBOUND /mnt/data/test
fi;
done
rm $INBOUND
但它只适用于单个文件;当文件夹中有多个文件时,重命名文件不起作用,应该用于修改多个文件
答案 0 :(得分:0)
尽量避免解析ls
的输出,而是使用:
for i in /mnt/GXSdata/Ravi/ECEPYO.*
您执行grep
的位置时,如果您希望一次查看一个文件,则应使用i
而不是$INBOUND
,并且可以考虑使用较新的$(...)
而不是反叛:
SEARCHSTRING=$(grep BOFA2016ECG "$i")
您可以使用cut
来提取单词,或者使用grep -o
运算符在bash
中进行模式匹配,而不是使用=~
。