別々のプロセスで列を抽出する必要がある場合は、を使用paste
して列をつなぎ合わせます。私はあなたのシェルがbash/zsh / kshであると仮定し、あなたのサンプル入力の空白行はそこにあるべきではないと仮定します。
paste -d, <(awk -F, '{print $2}' file) <(awk -F, '{print $3}' file)
を生成します
5,6
3,8
46,76
プロセス置換なし:
awk -F, '{print $2}' file > tmp1
awk -F, '{print $3}' file > tmp2
paste -d, tmp1 tmp2 > output
あなたの答えに基づいて更新してください:
最初の外観では、それは紛らわしい設定です。これは機能しますか?
for (( x=1; x<=$number_of_features; x++ )); do
feature_number=$(sed -n "$x {p;q}" feature.txt)
if [[ -f out.txt ]]; then
cut -d, -f$feature_number file.txt > out.txt
else
paste -d, out.txt <(cut -d, -f$feature_number file.txt) > tmp &&
mv tmp out.txt
fi
done
file.txtファイルを何度も読み取る必要があります。一度だけ読む必要がある方が明らかに効率的です。
awk -F, -f numfeat=$number_of_features '
# read the feature file into an array
NR==FNR {
colno[++i] = $0
next
}
# now, process the file.txt and emit the desired columns
{
sep = ""
for (i=1; i<=numfeat; i++) {
printf "%s%s", sep, $(colno[i])
sep = FS
}
print ""
}
' feature.txt file.txt > out.txt