使用 AWK 从数据集中提取特定列
extract specific columns from dataset using AWK
我正在尝试将简单的 awk 脚本应用于数据集文件。
该文件有 150 列,我只需要 20 到 30 之间的列。
下面是我用来获取字段在 20 到 30 之间的记录的脚本。
代码
BEGIN{}
{
for(f=20;f<=30;f++){
print $f;
}
}
我不知道为什么我在下一行得到 10 个字段的每个值。
即
示例数据集
1 2 3 4 5 6 7
2 2 3 4 5 6 7
3 3 3 4 5 6 7
4 4 4 4 5 6 7
5 5 5 5 5 6 7
6 6 6 6 6 6 7
7 7 7 7 7 7 7
I get output as
1
2
3
4
5
6
7
2
2
3
4
5
6
7
...so on
解决方案
BEGIN{FS=" ";}
{
for(f=20;f<=30;f++){
printf("%s ",$f);
}print "";
}
下面是另一种方法
awk -v f=20 -v t=30 '{for(i=f;i<=t;i++) \
printf("%s%s",$i,(i==t)?"\n":OFS)}' file
备注
f
和t
分别是起始列和结束列。
- 我们使用三元运算符来控制所需列之间的字段分隔符。
编辑
如果您需要第 20 至 30 列和最后一列,以下就足够了:
awk -v f=20 -v t=30 '{for(i=f;i<=t;i++) \
printf("%s%s",$i,(i==t)?OFS""$NF"\n":OFS)}' file
我正在尝试将简单的 awk 脚本应用于数据集文件。 该文件有 150 列,我只需要 20 到 30 之间的列。
下面是我用来获取字段在 20 到 30 之间的记录的脚本。
代码
BEGIN{}
{
for(f=20;f<=30;f++){
print $f;
}
}
我不知道为什么我在下一行得到 10 个字段的每个值。
即
示例数据集
1 2 3 4 5 6 7
2 2 3 4 5 6 7
3 3 3 4 5 6 7
4 4 4 4 5 6 7
5 5 5 5 5 6 7
6 6 6 6 6 6 7
7 7 7 7 7 7 7
I get output as
1
2
3
4
5
6
7
2
2
3
4
5
6
7
...so on
解决方案
BEGIN{FS=" ";}
{
for(f=20;f<=30;f++){
printf("%s ",$f);
}print "";
}
下面是另一种方法
awk -v f=20 -v t=30 '{for(i=f;i<=t;i++) \
printf("%s%s",$i,(i==t)?"\n":OFS)}' file
备注
f
和t
分别是起始列和结束列。- 我们使用三元运算符来控制所需列之间的字段分隔符。
编辑
如果您需要第 20 至 30 列和最后一列,以下就足够了:
awk -v f=20 -v t=30 '{for(i=f;i<=t;i++) \
printf("%s%s",$i,(i==t)?OFS""$NF"\n":OFS)}' file