file1から抽出する必要がある列番号を提供するfile2と比較して、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
どうやって進めますか?
答え1
また試み
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
答え2
そして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
説明する:
Perlユーティリティにstdinの列番号ファイル(1行に1つの列番号)を指定し、Perlコマンドラインにデータファイルを提供します。
配列要素コネクタの設定($"
)をaにTAB
変更して、すべての出力フィールドをタブ区切りにします。
印刷する列の配列が空で@A
あることを検出したら、すぐにプログラムを終了してください。File2
行ごとに正の整数を持つ行のみが含まれます。他の組み合わせは拒否されます。