Id,responseId,name,test1,test2,bcid,stype
213,A_123456,abc,test,zzz,987654321,alpha
412,A_234566,xyz,test,xxx,897564322,gama
125,A_456314,ttt,qa,yyy,786950473,delta
222,A_243445,hds,test,fff,643528290,alpha
456,A_466875,sed,test,hhh,543819101,beta
上記のカラムresponseIdとbcidを抽出します。本当に近い答えが見つかりました。AWKはカラム名に基づいてカラムを表示し、ヘッダと最後のデリミタを削除します
awk -F ',' -v cols=responseID,bcid '(NR==1){n=split(cols,cs,",");for(c=1;c<=n;c++){for(i=1;i<=NF;i++)if($(i)==cs[c])ci[c]=i}}{for(i=1;i<=n;i++)printf "%s" FS,$(ci[i]);printf "\n"}' <file_name>
ただし、最後に「、」、下に示すようにヘッダーが表示されます。
responseId,bcid,
A_123456,987654321,
A_234566,897564322,
A_456314,786950473,
A_243445,643528290,
A_466875,543819101,
bcidの後にヘッダーと "、"を印刷しないようにするにはどうすればよいですか?
の列がスペースやカンマを持っていますか?列の順序は変わりますか? – dawg
シェル変数を入力に渡すのか、変数としてawkに渡しますか? – RavinderSingh13
列にはカンマしかなく、列の順序が変更されるので、列名でそれらを読み取る必要があります。 –