我有一些具有以下名称的文本文件:
testfile_1_from_Country_A_final.txt
testfile_2_from_Country_A_final.txt
testfile_1_from_Country_B_final.txt
testfile_2_from_Country_B_final.txt
testfile_1_from_Country_C_final.txt
testfile_2_from_Country_C_final.txt
我必须添加一个特定的标题,每个文件由三个数字组成,具体取决于测试文件的编号(例如testfile_1)和国家的名称(例如国家A)和“1”。测试文件或国家/地区名称。
例如,如果来自测试file_1_from_Country_A_final.txt的数据是:
blablablabalabalbalablabbla
blabalalbblalbablablalbabla
blalalbablalblabblalbalbalb
blabalbalblbalbalbalbalbalb
abllablbalbalbalbalbalbalba
新文件应如下所示:
30 7 1
blablablabalabalbalablabbla
blabalalbblalbablablalbabla
blalalbablalblabblalbalbalb
blabalbalblbalbalbalbalbalb
abllablbalbalbalbalbalbalba
30,因为它是国家A和7,因为它是test_file编号1,最后1是每个文件必须的。
额外信息
实际上很多国家都有很多文件,所以也许最好有单独的文本文件,其中包含每个test_file数字的编号以及需要添加到标题中的每个国家/地区的编号。 / p>
提前致谢。
答案 0 :(得分:1)
使用此选项拆分文件名,转换元素并在文件中插入标题行:
for fileName in testfile*.txt
do
if [[ "$fileName" =~ testfile_([0-9]+)_from_Country_([A-Za-z_]+)_final.txt ]]
then
number=${BASH_REMATCH[1]}
country=${BASH_REMATCH[2]}
# now convert the number and the country
convertedNumber=$(grep "^$number " numberConversionFile.txt | cut -d' ' -f2)
convertedCountry=$(grep "^$country " countryConversionFile.txt | cut -d' ' -f2)
sed -i "1i$convertedCountry $convertedNumber 1" "$fileName"
fi
done
答案 1 :(得分:0)
这里涉及几个步骤。首先,您需要迭代文件。这可以使用for循环来完成:
for filename in testfile_*.txt
do
...
done
然后,您需要从每个文件名中提取测试文件编号和国家/地区。这可以通过在_
上拆分文件名来完成,如下所示:
IFS=_ read -a arr <<< "$filename"
test_file_num="${arr[1]}"
country="${arr[4]}"
接下来,您需要将测试文件编号和国家/地区转换为数字。您尚未提供有关如何将国家/地区A变为数字30的信息。
最后,您需要将标头写入每个文件。这可以使用这样的临时文件来完成:
echo "30 7 1" > tmpfile
cat "$filename" >> tmpfile
mv tmpfile "$filename"