【问题标题】:Separate the files based on a string in the data根据数据中的字符串分隔文件
【发布时间】:2016-04-15 09:29:41
【问题描述】:

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

我在 Ravi 目录中有很多以 ECEPYO 开头的文件。

如果文件中存在字符串“BOFA2016ECG”,我应该重命名文件并将其移动到新目录 teja。

如果文件中没有字符串,我需要将其移动到测试文件夹。

我正在使用以下代码

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

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

【问题讨论】:

    标签: bash awk rename


    【解决方案1】:

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

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

    在您使用grep 的地方,如果您打算一次查看一个文件,则应使用i 而不是$INBOUND,并且您可以考虑使用较新的$(...) 而不是反引号:

    SEARCHSTRING=$(grep BOFA2016ECG "$i")
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多