提取文件列表并创建包含此列表的新文件

时间:2012-09-25 23:24:22

标签: unix sed awk

我是一名研究员,我在Unix命令方面的技能有限。我目前正在处理一个包含大约1000个文件的文件夹,我必须从该文件夹中提取一些文件名,并创建包含这些文件名的另一个文件(配置文件)。

基本上,该文件夹的文件名格式如下:

1_Apple_A_someword.txt 
1_Apple_B_someword.txt 
2_Apple_A_someword.txt 
2_Apple_B_someword.txt 
3_Apple_A_someword.txt 
3_Apple_B_someword.txt

等等直到

1000_Apple_A_someword.txt
1000_Apple_B_someword.txt

我只想提取出所有包含“Apple_A”的文件。另外,我想创建另一个文件,其中包含每个“Apple_A”文件的“标签”(Unix变量),这些文件的值是文件的名称。此外,'标签'是文件名的一部分(直到单词“Apple”之前的所有内容)例如,

1_Apple=1_Apple_A_someword.txt
2_Apple=2_Apple_A_someword.txt
3_Apple=3_Apple_A_someword.txt

依此类推......直到

1000_Apple=1000_Apple_A_someword.txt

你能告诉我一个单行的Unix命令吗?也许使用“awk”和“sed”

4 个答案:

答案 0 :(得分:2)

尝试

ls *Apple_A* | sed 's/\(\(.*Apple\).*\)$/\2=\1/'

答案 1 :(得分:1)

这可能适合你(GNU sed):

ls -1 | sed '/^\([0-9]\+_Apple\)_A/!d;s//\1=&/'

答案 2 :(得分:0)

awk版本,仅供参考:

ls -1 | awk -vFS='_' '/Apple_A/ {print $1"_"$2"="$0}'

答案 3 :(得分:0)

ls -1|perl -F_ -ane 'if($_=~m/Apple_A/){print $F[0]."_".$F[1]."=".$_}'