Shell
我想從文件中提取特定的列,列號是使用 shell 腳本在不同的文件中給出的?
我想通過與 file2 比較從 file1 中提取特定列,其中給出的列號應該從 file1 中提取。
文件 1(源數據)如下所示:
1 2 3 4 5 10 11 14 13 25 37 2 4 7 9 23 12 12 23 15 17 18 24 25
文件 2(帶有要提取的列號):
2 4 5
所以我想比較file1和file2。使用文件 2 我想從文件 1 中提取第 2、4、5 列。
期望的輸出:
2 4 5 25 2 4 12 15 17
我該如何進行呢?
與
Perl
:perl -pale '$"="\t"; chomp(@A = map { $_-1 } grep { /^[1-9]\d*$/m } <STDIN>) if $. == 1; $_ = @A ? "@F[@A]" : last; ' File1 < File2
結果:
2 4 5 25 2 4 12 15 17
解釋:
將標準輸入上的列號文件(每行一列 num)提供給 perl 實用程序,並將數據文件提供給 Perl 的命令行。
將數組元素連接符 (
$"
) 設置為 aTAB
,以便所有輸出欄位都以 TAB 分隔。一旦我們檢測到要列印的列數組 ,
@A
發現為空,就退出程序。它只包括那些File2
每行有一個正整數的行。拒絕任何其他組合。
也試試
awk ' FNR == NR {COL[NR] = $1 # get column numbers from file2 MX = NR # retain max line No. in file2 next } {for (i=1; i<=MX; i++) printf "%s%s", $(COL[i]), (i==MX)?ORS:OFS # print those columns, and field # or line separator } ' file2 file1 2 4 5 25 2 4 12 15 17