0

我是一名研究人员,我在 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

4 回答 4

2

尝试

ls *Apple_A* | sed 's/\(\(.*Apple\).*\)$/\2=\1/'
于 2012-09-25T23:28:41.993 回答
1

这可能对您有用(GNU sed):

ls -1 | sed '/^\([0-9]\+_Apple\)_A/!d;s//\1=&/'
于 2012-09-26T05:58:36.270 回答
0

一个 awk 版本,仅供参考:

ls -1 | awk -vFS='_' '/Apple_A/ {print $1"_"$2"="$0}'
于 2012-09-26T04:16:31.843 回答
0
ls -1|perl -F_ -ane 'if($_=~m/Apple_A/){print $F[0]."_".$F[1]."=".$_}'
于 2012-09-26T06:00:13.620 回答