我有一些文本文件,其中包含以下名称:
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"one_answers" 1"测试文件或国家名称。
例如,如果来自test 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号码的数字以及每个国家/地区需要添加到标题中的数字是一个好主意。<<<<<<<<<<
预先感谢。
使用它来拆分文件名,转换元素并将标头行插入文件中:
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
这里涉及几个步骤。首先,您需要迭代文件。可以使用循环:
完成for filename in testfile_*.txt
do
...
done
然后,您需要从每个文件名中提取测试文件编号和国家/地区。这可以通过在_
上分配文件名来完成,如下所示:
IFS=_ read -a arr <<< "$filename"
test_file_num="${arr[1]}"
country="${arr[4]}"
接下来,您需要将测试文件编号和国家/地区转换为编号。您尚未提供有关如何变为数字30的信息。
最后,您需要将标题写入每个文件。可以使用这样的临时文件来完成:
echo "30 7 1" > tmpfile
cat "$filename" >> tmpfile
mv tmpfile "$filename"