linux根据列数分别提取行

linux根据列数分别提取行

我想提取特定列具有特定编号的行。文件如下。

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

我想根据第二列提取单独文件中的行。

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

你不需要跑wc85次,也不需要awk跑170次。除了和$2之外还有什么限制吗?从内部重定向打印,尝试(无限制)$2 >= 0$2 <= 84awk

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

如果您的输出文件接近允许的最大打开文件数(linux:系统参数 OPEN_MAX),则需要在追加给他们。

相关内容