从UNIX中的多个文件中提取特定数据

时间:2012-02-29 11:15:09

标签: shell unix scripting

从多个文件中提取特定列值

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

我想从所有.txt文件中提取第二列值并将其存储到其他一些文件中。

Ouput.txt应为

test.txt 20
test1.txt 21

2 个答案:

答案 0 :(得分:3)

目前还不清楚你在寻找什么,但如果你只想打印第4行的第二列(这就是歧义,因为不清楚你是否总是想要第4行的数据,或者^ RECORD之后的3行数据,或每次出现“sl no。”之后的行数据等,你可以这样做:

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

或者,如果你使用的是不支持FILENAME的awk(目前,我不确定这是标准的还是gnu扩展名)并且你没有使用csh或其中一个表兄弟,你可以做:

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

答案 1 :(得分: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