У меня есть два следующих текстовых файла:
file1
-7.7
-7.4
-7.3
-7.3
-7.3
file2
4.823
5.472
5.856
4.770
4.425
И я хочу объединить их рядом, разделив их запятая:
file3
-7.7,4.823
-7.4,5.472
-7.3,5.856
-7.3,4.770
-7.3,4.425
Я знаю, что это легко сделать с помощью paste -d ',' file1 file2 > file3
, но я хочу решение, которое позволило бы мне контролировать каждую итерацию, так как мой набор данных большой и мне также нужно добавить другие столбцы в выходной файл. Например:
A,-7.7,4.823,3
A,-7.4,5.472,2
B,-7.3,5.856,3
A,-7.3,4.770,1
B,-7.3,4.425,1
Вот что я получил до сих пор:
awk 'NR==FNR {a[$count]=$1; count+=1; next} {print a[$count] "," $1; count+=1;}' file1 file2 > file3
Вывод:
-7.3,4.823
-7.3,5.472
-7.3,5.856
-7.3,4.770
-7.3,4.425
Я новичок в bash и awk, так что приветствуется подробный ответ:)
Редактировать:
Предположим, у меня есть каталог с парами файлов, заканчивающийся двумя расширениями: .ext1 и .ext2. Эти файлы имеют параметры, включенные в их имена, например, file_0_par1_par2.ext1 имеет свою пару file_0_par1_par2.ext2. Каждый файл содержит 5 значений. У меня есть функция, чтобы извлечь его серийный номер и параметры из его имени. Моя цель - записать в одном файле csv (file_out.csv) значения, присутствующие в файлах, а также параметры, извлеченные из их имен.
Код:
for file1 in *.ext1 ; do
for file2 in *.ext2 ; do
# for each file ending with .ext2, verify if it is file1's corresponding pair
# I know this is extremely time inefficient, since it's a O(n^2) operation, but I couldn't find another alternative
if [[ "${file1%.*}" == "${file2%.*}" ]] ; then
# extract file_number, and par1, par2 based on some conditions, then append to the csv file
paste -d ',' "$file1" "$file2" | while IFS="," read -r var1 var2;
do
echo "$par1,$par2,$var1,$var2,$file_number" >> "file_out.csv"
done
fi
done
done