我至少有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;插入文字。
答案 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)}'