Linux 将文件名转换为文本
我至少有40个文件(20个是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
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
#!/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风格的版本:
- 我们将
文件名导入awkSAVE.safe
- 使用点作为字段分隔符(因此,
是基本名称,$1
是原始文件名)$0
- 并使用
创建所需的文本:printf
ls -1 *.SAFE.safe | awk -F. '{printf("anytext %s\nanytext2 %s.xml anytext2\n",$0,$1)}'
对于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)}'