2012-04-24 2 views
1

Мои данные выглядит следующим образом:AWK колонки печати для заданного диапазона

0.000000 0.071429 0.071429 0.857143 
0.071429 0.428571 0.071429 0.428571 
0.357143 0.214286 0.357143 0.071429 
0.000000 0.714286 0.000000 0.285714 
0.000000 0.571429 0.000000 0.428571 
0.428571 0.357143 0.071429 0.142857 
0.000000 0.071429 0.071429 0.857143 
0.071429 0.000000 0.928571 0.000000 
0.000000 0.071429 0.000000 0.928571 
0.000000 0.285714 0.000000 0.714286 
0.142857 0.000000 0.785714 0.071429 

Я хочу, чтобы это выглядело так:

AC name_of_the_file.txt 
00 0.000000 0.071429 0.071429 0.857143 
01 0.071429 0.428571 0.071429 0.428571 
02 0.357143 0.214286 0.357143 0.071429 
03 0.000000 0.714286 0.000000 0.285714 
04 0.000000 0.571429 0.000000 0.428571 
05 0.428571 0.357143 0.071429 0.142857 
06 0.000000 0.071429 0.071429 0.857143 
07 0.071429 0.000000 0.928571 0.000000 
08 0.000000 0.071429 0.000000 0.928571 
09 0.000000 0.285714 0.000000 0.714286 
10 0.142857 0.000000 0.785714 0.071429 
XX 
// 

Как AWK $ 1 для диапазона (от 00 до файл заканчивается)?

+1

Можете уточнить, что вы ищете? Почему вы упоминаете '$ 1'? Вы ищете дополнительную информацию в верхней и нижней части файла? Вы как-то надеетесь отфильтровать данные? Если да, то как? Что произойдет, если в файле больше 100 строк? Что произойдет, если на входе несколько файлов? Что происходит после окончания предыдущего файла? Что происходит до начала следующего файла? –

ответ

2

Один из способов:

awk 'FNR == 1 { print FILENAME } { printf "%02d %s\n", FNR - 1, $0 }' infile 

Выход:

infile 
00 00 0.000000 0.071429 0.071429 0.857143 
01 01 0.071429 0.428571 0.071429 0.428571 
02 02 0.357143 0.214286 0.357143 0.071429 
03 03 0.000000 0.714286 0.000000 0.285714 
04 04 0.000000 0.571429 0.000000 0.428571 
05 05 0.428571 0.357143 0.071429 0.142857 
06 06 0.000000 0.071429 0.071429 0.857143 
07 07 0.071429 0.000000 0.928571 0.000000 
08 08 0.000000 0.071429 0.000000 0.928571 
09 09 0.000000 0.285714 0.000000 0.714286 
10 10 0.142857 0.000000 0.785714 0.071429 
+0

Работал! Благодарю. Можете ли вы показать добавление имени файла в первую строку? – PoGibas

+0

Использование 'FNR-1' вместо' num ++ 'более идиоматично. @ user1286528: См. комментарий glenn jackman для способа включить имя файла. –

+0

@ user1286528: Обновленный ответ. – Birei

2

Я не ясно, что реальный вопрос. Поверхностно это должно сделать эту работу:

awk '{ if (line++ == 0) { print "AC " FILENAME; } printf("%.2d %s\n", NR-1, $0); } 
    END { print "XX\n//" }' 
+0

+1 хотя 'NR == 1 {print" AC ", FILENAME}' немного более аккуратен для первого бита. –

+0

Это, безусловно, другой способ сделать это. И, вероятно, с использованием FNR 'gawk' с' FNR == 1 {print "AC" FILENAME} 'будет получать новое имя файла перед каждым новым файлом (при этом можно поставить вопрос, будет ли либо XX, либо // или оба должен идти после предыдущего файла и до новой строки AC). Такие детали не заданы в вопросе. –

+0

'FNR' не является' gawk'-specific. Он указан в [POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html). –

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

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