Linuxは、列数に応じて個別に行を抽出します。

Linuxは、列数に応じて個別に行を抽出します。

特定の列に対して特定の数の行を抽出したいと思います。ファイルは以下のようになります。

ID Age
1 2
2 5
3 36
4 2
5 29
...
2000 84

2番目の列に基づいて別々のファイルから行を抽出したいと思います。

for Num in {0..84}
do
awk '$2==${Num}' file > out_${Num}
done

上記のコマンドは機能しませんが、同様のことをしたいと思います。誰でも私を助けることができますか?

ありがとうございます!

答え1

for num in {0..84}; do co=$(awk -v num="$num" '$2 == num {print $0}' file1|wc -l); if [[ $co > 0 ]]; then awk -v num="$num" '$2 == num {print $0}' file1 >out_$num;fi; done

テストすると、この場合は機能します。

答え2

85番を走る必要もなくwc、170番を走る必要もありませんawk。その他に$2制限がありますか?内部で印刷をリダイレクトしてみてください(無制限)。$2 >= 0$2 <= 84awk

awk 'NR>1 {print > ("out_" $2)}' file

出力ファイルが許可されているオープンファイルの最大数(linux:システムパラメータOPEN_MAX)に近い場合は、次のことを行う必要があります。追加彼らに与えてください。

関連情報