如何从文本文件中排除行以进行循环

时间:2014-11-11 14:00:38

标签: loops unix foreach csh

我有一个包含多行数据的文本文件(file1.txt)。 这个文本文件我用来将数据从目录A复制到另一个B.我的脚本查看表达式是否包含在存储在A中的文件的文件名中。 在目录A中,我使用另一个文本文件(file2.txt)来获取我想在脚本中排除的信息(如[bla][0-9][0-9][bla][0-9][0-9]之类的行)。

set x = `grep '[bla][0-9][0-9][bla][0-9][0-9]' file1.txt`

foreach i ( $x )
    cp A/*$i* B/.
end

例如file1.txt中的行:

bla11bla11
bla12bla12
bla13bla13
bla14bla14
bla15bla15
来自file2.txt的

和grep结果必须为循环排除

bla11bla11
bla12bla12

我的脚本最终应该只使用以下行

bla13bla13
bla14bla14
bla15bla15

我该怎么做?

1 个答案:

答案 0 :(得分:0)

一个简单的嵌套循环完全在csh中完成:

#!/bin/csh -f

set f = `grep 'bla[0-9][0-9]bla[0-9][0-9]' file1.txt`
set x = `grep 'bla[0-9][0-9]bla[0-9][0-9]' file2.txt`

echo "Files: $f"
echo "To be excluded from Files: $x"

set r = ( )
foreach i ( $f )
  set skip = 0
  foreach j ( $x )
    if ("$i" == "$j") then
      set skip = 1
      break
    endif
  end
  if ($skip == 0) set r = ($r $i)
end

echo "Result: $r"

在上面的示例文件上运行时的输出:

Files: bla11bla11 bla12bla12 bla13bla13 bla14bla14 bla15bla15
To be excluded from Files: bla11bla11 bla12bla12
Result: bla13bla13 bla14bla14 bla15bla15