根据数据中的字符串分隔文件

时间:2016-01-11 06:22:54

标签: bash awk rename

您好我已经问过这个问题,但由于信息充足,它被称为无效。让我再次提出我的问题。

我在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

但它只适用于单个文件;当文件夹中有多个文件时,重命名文件不起作用,应该用于修改多个文件

1 个答案:

答案 0 :(得分:0)

尽量避免解析ls的输出,而是使用:

for i in /mnt/GXSdata/Ravi/ECEPYO.*

您执行grep的位置时,如果您希望一次查看一个文件,则应使用i而不是$INBOUND,并且可以考虑使用较新的$(...)而不是反叛:

SEARCHSTRING=$(grep BOFA2016ECG "$i")

您可以使用cut来提取单词,或者使用grep -o运算符在bash中进行模式匹配,而不是使用=~