我在bigdata/*.txt中有所有的文本文件。这个文件的格式是languageName-xxx-10MB.txt。我想执行一个操作,将这些文件从10MB递归地分块到第一个10KB,然后将新形成的文件放在/smalldata/。新形成的文件应采用languageName-xxx-10KB.txt 格式
这两种操作我都独立尝试过。第一个是循环遍历bigdata中的所有文件/使用
#!/bin/bash
for entry in bigdata/*
do
echo "$entry"
done
我得到的输出
bigdata/lang1-xxx-10MB.txt
bigdata/lang2-xxx-10MB.txt
.
.
bigdata/langn-xxx-10MB.txt
我还尝试过使用head
命令,该命令可以使用获得第一个10KB的文件
head -c 10240 lang1-xxx-10MB.txt > ../smalldata/lang1-xxx-10KB.txt
我正在寻找一种迭代合并这两个任务的方法。
在包含bigdata
和smalldata
目录的目录中,您可以运行
#!/bin/bash
cd bigdata
for entry in *
do
head -c 10240 "$entry" > "../smalldata/${entry//10MB/10KB}"
done
${..}
部分被称为参数扩展。
#! /bin/bash
BIGDATA=bigdata/*
SMALLDATA=smalldata
for entry in $BIGDATA
do
filename=`basename $entry`
newname=$(echo $filename | awk -F '-' '{print $1 "-" $2 "-10KB.txt"}')
head -c 1 $entry > $SMALLDATA/$newname
done