从多个文件中提取特定列值
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
答案 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