Linux 将文件名转换为文本

Linux 将文件名转换为文本,linux,bash,text,text-processing,Linux,Bash,Text,Text Processing,我至少有40个文件(20个是xml.格式,20个是safe.格式)。 例如: iw1-20150612.SAFE.safe iw2-20150714.SAFE.safe iw1-20150612.xml iw2-20150714.xml 我想通过Linux中的终端将这个文件名放在文本的某个位置的txt文件中(或者在此过程中添加文本) 文本可以是任何文本,例如: anytext iw1-20150612.SAFE.safe anytext2 iw1-20150612.xml anytext2

我至少有40个文件(20个是
xml.
格式,20个是
safe.
格式)。 例如:

iw1-20150612.SAFE.safe
iw2-20150714.SAFE.safe
iw1-20150612.xml
iw2-20150714.xml
我想通过Linux中的终端将这个文件名放在文本的某个位置的txt文件中(或者在此过程中添加文本)

文本可以是任何文本,例如:

anytext iw1-20150612.SAFE.safe
anytext2 iw1-20150612.xml anytext2  iw1-20150612.xml
anytext Iw2-20150714.SAFE.safe
anytext2 iw2-20150714.xml anytext2  iw2-20150714.xml
我在这里需要的示例

awk 'NR>1 {print $0}' < ../og/iw1-20150612.SAFE.safe > tmp_file
cat ../og/iw1-20150612.xml tmp_file ../og/m.xml > ./iw1-20150612.xml
awk 'NR>1 {print $0}' < ../og/iw2-20150714.SAFE.safe > tmp_file
cat ../og/iw2-20150714.xml tmp_file ../og/m.xml > ./iw2-20150714.xml
#and etc 

但是我不知道如何“选择一个地方”来插入文本。

您可以使用一个简单的bash for循环来循环文件名。只要每个
safe
文件都有相应的
xml
文件,就可以

  • safe
    文件上循环
  • 获取不带扩展名的基本文件名
  • 并从中创建
    xml
    文件名和文本
script.sh

#!/bin/bash

OUTFILE=textfile
EXTENSION=.SAFE.safe

# rm -rf "$OUTFILE" # uncomment if required
for f in *${EXTENSION}
do
    # f i a .. safe file we remove the extension 
    base=${f%%$EXTENSION}
    echo -e "anytext $f\nanytext2 ${base}.xml anytext2 ${base}.xml" >> "$OUTFILE"
done
根据需要设置
OUTFILE
,如果需要,取消注释
rm

使用awk更新

如果您有许多文件,并且由于频繁写入
$OUTFILE
,bash for循环会变慢,下面是相同想法的一个更具shell风格的版本:

  • 我们将
    SAVE.safe
    文件名导入awk
  • 使用点作为字段分隔符(因此,
    $1
    是基本名称,
    $0
    是原始文件名)
  • 并使用
    printf
    创建所需的文本:

    ls -1 *.SAFE.safe | awk -F. '{printf("anytext %s\nanytext2 %s.xml anytext2\n",$0,$1)}'
    

请澄清您的具体问题,或添加其他详细信息,以突出显示您所需的内容。正如目前所写的,很难说清楚你在问什么。这样更好吗?我希望现在成为clear@user2899758当前位置不清楚您想做什么?顺便说一句,你的尝试有什么问题?我添加了我不成功的尝试并编辑了Q。非常酷,谢谢,成功了!但是,出于兴趣,以及不同文件格式的名称是否不同?我只能对一种文件格式执行此操作
对于in$(cd any/directory;ls*xml)执行echo“anytext$a anytext$a”>>data.txt done
如果不同的扩展需要不同的输出,并且希望保留序列,则需要在扩展上执行
If语句。关于bash或awk的文档包含了所有细节。
ls -1 *.SAFE.safe | awk -F. '{printf("anytext %s\nanytext2 %s.xml anytext2\n",$0,$1)}'