将文本文件名的一部分与目录中的文件名进行比较(grep + awk)

时间:2012-10-08 14:44:50

标签: linux shell awk grep compare

这不是最容易在标题中解释的内容。

我有一个文件inputfile.txt,其中包含部分文件名:

file1.abc
filed.def
fileq.lmn

此文件是一个输入文件,我需要使用它来查找实际目录的完整文件名。文件名的末尾因具体情况而异,但其中一部分始终相同。

我想我可以将文件从输入文件grep到所述目录中的ls命令(或ls命令到一个简单的文本文件),然后使用awk输出我想要的完整结果,但我有一些麻烦这样做。

从输入文件file1.abc中读取

inputfile.txt 它会根据目录内容进行检查。 如果文件存在,则创建基于文件名的特定目录。

(我也在Busybox环境中......我没有太多的东西可供我使用)

像这样......

cat lscommandoutput.txt \
        | awk -F: '{print("mkdir" system("grep $0"); inputfile.txt}' \
        | /bin/sh

谢谢。

编辑:我很抱歉没有明白这一点。 输出应该是lscommandoutput.txt中找到的每一行的完整文件名,使用inputfile.txt来grep这些特定的行。

如果inputfile.txt包含:

file1.abc
filed.def
fileq.lmn

和lscommandoutput.txt包含:

file0.oba.ca-1.fil
file1.abc.de-1.fil
filed.def.com-2.fil
fileh.jkl.open-1.fil
fileq.lmn.he-2.fil

将忽略inputfile.txt中未包含的额外行。 inputfile.txt中的目录有一个为它们创建的目录,其名称是从lscommandoutput.txt中获取的。

/dir/dir2/file1.abc.de-1.fil/ <-- directory in which files can be placed in
/dir/dir2/filed.def.com-2.fil/
/dir/dir2/fileq.lmn.he-2.fil/

希望这有点清楚。

1 个答案:

答案 0 :(得分:0)

首先,您赢得useless use of cat award

其次,你已经非常好地解释了这个 。如果您无法用简单的英语清楚地描述问题,那么将其转换为脚本或命令集就不足为奇了。

grep -f是获取目录名称的好方法,但我不明白之后你想用它们做什么。

  

我现在的问题是使用输出的文件和我要放置文件夹的文件

WUT? “我要放文件夹的那个文件”是什么意思?文件来自哪里?它是inputlist.txt中命名的文件吗?它是否在匹配的目录中?

如果您只想创建目录,可以执行以下操作:

fgrep -f ./inputfile.txt ./lscommandoutput.txt | xargs mkdir

N.B。您可能需要fgrep,以便不将输入字符串视为正则表达式,并忽略.等正则表达式元字符。