2016-03-11 2 views
0

У меня есть несколько файлов, начинающихся со строки «файл», а затем числа (file1, file2 и т. Д.).linux получить конкретные поля из нескольких файлов

Содержание этих файлов аналогично и выглядит следующим образом

file1: 
$xx_ at 10.0 "$elt_(0) coordinates 636.46 1800.37 9.90" 
$xx_ at 10.0 "$elt_(1) coordinates 367.78 1263.63 7.90" 

Для каждого файла, я хочу только сохранить индекс элемента и 2 числовых полей только после координат (в том же файле или в другой файл):

file1:

0 636.46 1800.37 
1 367.78 1263.63 

То, что я пытался сделать, как это (но это не правильно)

find . -name "file*"|while read fname; do 
    echo "$fname" 
    for line in $(cat "$fname") do 
    FS="[_() ]" 
    print $7 "\t" $10 "\t" $11 > $fname 
    done 
done 
+0

Является ли число в '$ elt_ (0) 'такой же, как индекс? – mstruebing

ответ

1

Это идеальное использование awk. С помощью awk вы можете просто напечатать определенные слова.

Если индекс номер строки вы можете использовать это:

cat -n ./file1 | awk '{print $1 -1 " " $7 " " $8}' это просто печатает файлы с номерами строки и печатает первое, седьмое и восьмое слово.

Если индекс является $elt_(0) число в Parenthese вы можете использовать СЭД, как это:

cat ./file1 | awk '{print $4 " " $7 " " $8}' | sed 's/"$elt_(//g' | sed 's/)//g' | sed 's/"//g' 

выход:

1 636.46 1800.37 
2 367.78 1263.63 

Link to awk Link to sed

+0

Я пробовал с awk, я могу сделать это для одного файла, но не в цикле. Потому что у меня есть несколько файлов, поэтому я не могу сделать это один за другим. –

+0

Что такое индекс? – mstruebing

+0

Как насчет 'find -type f -iname '* file-pattern *" -exec script.sh {} \; 'script.sh - это awk-материал в этом случае. – mstruebing

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