Извлечение определенных данных из нескольких файлов в UNIX - PullRequest
0 голосов
/ 29 февраля 2012

Извлечение определенного значения столбца из нескольких файлов

ls -ltr

-rwxr-xr-x   4 dc staff   131 Feb 27 21:15 test.txt
-rwxr-xr-x   4 dc staff   134 Feb 25 21:15 test1.txt

test.txt и test1.txt (аналогичная структура) содержит структуру таблицы, такую ​​как

cat test.txt

RECORD #1 DETAILS

    sl no.  regno  name  age
     1       20    ABC   10

cat test1.txt

RECORD #2 DETAILS

      sl no.  regno  name  age
       1       21    DEF   11

Я хочу извлечь значение 2-го столбца из всех файлов .txt и сохранить его в некоторых других файлах.

Ouput.txt должен быть

test.txt 20
test1.txt 21

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Не совсем понятно, что вы ищете, но если вы просто хотите напечатать второй столбец 4-й строки (и это неоднозначность, так как неясно, хотите ли вы всегда получать данные из строки 4 или данные из 3 строк после ^ RECORD или данные из строки после каждого вхождения «sl no.» и т. д.) можно выполнить:

$ awk 'FNR == 4 { print FILENAME, $2 }' test.txt test1.txt

или, если вы используете awk, который не поддерживает FILENAME (на данный момент я не уверен, является ли это стандартным расширением или расширением gnu), и вы не используете csh или одного из его двоюродных братьев, вы можете сделать :

$ for n in test.txt test1.txt; do printf '$s ' $n; awk 'NR==4{ print $2}' $n; done
2 голосов
/ 29 февраля 2012
awk 'NR > 1 {print FILENAME, $2}' *txt > Output.txt

Может работать на тебя. Но если вы хотите убедиться, что только части после заголовка должны быть напечатаны, вы можете сделать это следующим образом:

awk 'fname != FILENAME {p=0 ; fname=FILENAME} } 
     /sl no.  regno  name  age/ {p++; next}
     p>0 {print FILENAME, $2}' *txt > Output.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...