複数の列名の場所を取得する方法

複数の列名の場所を取得する方法

列名がどの場所番号に表示されるかを知りたいシナリオがあります。

以下にサンプルデータがあるように

ID|NAME|S1|BQ|S2|VN|D1
1|vimal|10.12|12.4|56.2|12.2|11.22
2|vilas|10.12|12.4|56.2|12.2|11.22
3|viky|10.12|12.4|56.2|12.2|11.22

列名:S1 S2 D1

出力は次のようになります。

3
5
7

答え1

サンプルデータがfile1にあるとします。

awk -F"|" 'NR==1{for(i=1;i<=NF;i++){print $i"=$"i}}' file1 | grep -E "S1|S2|D1"

awkを使用して最初の行のみを読み取り、それを列に分割して列と列番号で表します。 grepを使用して興味のあるリストのみをフィルタリングします。

OPが出力形式を変更した後、ソリューションが更新されました。

awk -F"|" 'NR==1{for(i=1;i<=NF;i++){if ($i ~ /S1|S2|D1/){print i;}}}' file

関連情報