将文件名放入文本中

时间:2017-01-05 10:15:11

标签: 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  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 

按照文件夹中的文件名进行排序也很重要。 我的尝试:

find /any/directory/ -type f -printf "%f\n" >> data.txt

但我不知道如何选择一个地方&#39;插入文字。

1 个答案:

答案 0 :(得分:1)

您可以使用简单的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更新

如果你有很多文件并且bash for循环由于频繁写入$OUTFILE而变慢,那么这是一个更为shell风格的同一个想法:

  • 我们将SAVE.safe个文件名传输到awk,
  • 使用点作为字段分隔符(因此$1是基本名称,$0是原始文件名)
  • 并使用printf

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