2012-02-29 44 views
0
從多個文件的特定數據

提取從多個文件的特定列值提取在UNIX

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的(類似的結構)包含像

表結構

貓的test.txt

RECORD #1 DETAILS 

    sl no. regno name age 
    1  20 ABC 10 

貓test1.txt的

RECORD #2 DETAILS 

     sl no. regno name age 
     1  21 DEF 11 

我想從所有.txt文件中提取第二列值並將其存儲到其他文件中。

Ouput.txt應該

test.txt 20 
test1.txt 21 
+0

我已經使用awk命令來打印第二列。但幾乎沒有額外的文本與數字一起打印。 – Debaditya 2012-02-29 11:31:51

回答

3

這不完全清楚你在找什麼,但如果你只是想打印第二第4行的列(這是不明確的,因爲不清楚你是否總是希望第4行的數據,或者^ RECORD之後的3行數據,或者每次出現「sl no」後的行中的數據。等),你可以這樣做:

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

,或者,如果您使用的是不支持文件名的AWK(此刻,我不知道這是標準的或GNU擴展),你是不使用csh或者它的一個表兄弟,你可以這樣做:

 
$ for n in test.txt test1.txt; do printf '$s ' $n; awk 'NR==4{ print $2}' $n; done 
+0

FILENAME和FNR都是在開放組標準中爲awk指定的。 – 2012-02-29 16:00:43

2
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 
+0

我已更新輸入文件。我使用awk,但無法獲得第二列。它生成了幾個其他文本以及所需的答案。我只需要數字(如output.txt中所示) – Debaditya 2012-02-29 11:30:54

+0

您可以在當前文件中使用標準變量FNR作爲記錄編號,而不是操作p。 – 2012-02-29 16:02:22

+0

是的,但是如果有更多的標題像線一樣,從文件到文件有所不同? – 2012-02-29 19:04:34