2015-07-19 6 views
0

Я пытаюсь получить команду вставки, чтобы петли через пары файлов, вставляя их вместе и выводя их как уникальный файл. Я пробовал много вещей, вот некоторые из них:bash paste: петля через пары файлов на основе подстановочного знака, генерировать отдельные выходные файлы

for i in *_temp4.csv; do paste *_temp4.csv *_temp44.csv > ${i}_out.csv; done 
#Each output contains each input file (rather than pairs). Obviously this is because of the * wildcard 

for i in *_temp2.csv_temp4.csv; do paste $_temp2_temp4.csv $_temp3_temp44.csv > ${i}_out.csv; done 

ошибки нет, пустые выходные файлы

for i in *_temp2.csv_temp4.csv; do paste ${_temp2_temp4.csv} ${_temp3_temp44.csv} > ${i}_out.csv; done 

выход:

combo15.awk: line 12: ${_temp2_temp4.csv}: bad substitution 

Я думаю, что мне не хватает чего-то очень элементарного как $ привыкает, но я всю ночь искал всю жизнь.

весь мой код, для контекста, хотя я не понимаю, почему предыдущие строки должны влиять на это.

for i in *.dat; do awk 'NR > 23 { print }' ${i} > ${i}_temp1.csv; done 

for i in *_temp1.csv; do awk 'BEGIN{OFS=FS=","}$2==0{$2="between"}BEGIN{OFS=FS=","}$2==1{$2="lego"}BEGIN{OFS=FS=","}$2==2{$2="pin"}BEGIN{OFS=FS=","}$2==3{$2="dice"}BEGIN{OFS=FS=","}$2==4{$2="jack"}BEGIN{OFS=FS=","}$2==8{$2="escape"}{print}' ${i} > ${i}_temp2.csv; done 

for i in *_temp2.csv; do awk -v OFS="," '{$4 = $1 - prev1; prev1 = $1; print;}' ${i} > ${i}_temp3.csv; done 

for i in *_temp2.csv; do awk -F "," 'BEGIN{print "new line"}{print $2}' ${i} > ${i}_temp4.csv; done 

for i in *_temp3.csv; do awk -F "," '{print $5}' ${i} > ${i}_temp44.csv; done 

for i in *_temp2.csv_temp4.csv; do paste $_temp2_temp4.csv $_temp3_temp44.csv > ${i}_out.csv; done 
+0

Для входных файлов? trial_02_mid.dat trial_02_bottom.dat trial_03_top.dat Все остальные выходы генерируются, как и ожидалось, только последняя строка дает мне неприятности. – Thoughtcraft

+0

Да, и вариации на нем в моем OP. – Thoughtcraft

+0

Я не уверен, я понял ваше требование. Но это то, что вам нужно? 'для i в * _temp4.csv; do paste "$ i" "$ {i/_temp4.csv/_temp44.csv}"> $ {i} _out.csv; done' – anishsane

ответ

1

Ваша проблема заключается в том, что имена ваших файлов растут неуправляемо. Это изменение должно решить эту проблему:

for i in *.dat; do awk 'NR > 23 { print }' ${i} > ${i}_temp1.csv; done 

for i in *.dat; do awk 'BEGIN{OFS=FS=","}$2==0{$2="between"}BEGIN{OFS=FS=","}$2==1{$2="lego"}BEGIN{OFS=FS=","}$2==2{$2="pin"}BEGIN{OFS=FS=","}$2==3{$2="dice"}BEGIN{OFS=FS=","}$2==4{$2="jack"}BEGIN{OFS=FS=","}$2==8{$2="escape"}{print}' ${i}_temp1.csv > ${i}_temp2.csv; done 

for i in *.dat; do awk -v OFS="," '{$4 = $1 - prev1; prev1 = $1; print;}' ${i}_temp2.csv > ${i}_temp3.csv; done 

for i in *.dat; do awk -F "," 'BEGIN{print "new line"}{print $2}' ${i}_temp2.csv > ${i}_temp4.csv; done 

for i in *.dat; do awk -F "," '{print $5}' ${i}_temp3.csv > ${i}_temp44.csv; done 

for i in *.dat; do paste ${i}_temp4.csv ${i}_temp44.csv > ${i}_out.csv; done 
+0

Да! Это работает отлично! Я собирался беспокоиться о сумасшедших именах файлов позже, но это исправлено. Спасибо! – Thoughtcraft

 Смежные вопросы

  • Нет связанных вопросов^_^