繁体   English   中英

使用AWK获取一系列列并将它们打印为单列

[英]Using AWK to take a range of columns and print them as a single column

我有一个文件,我想打印列i> N的每个条目,然后是下一列的内容。 每行具有相同的列数。 输入示例:

a b c d 
a1 b1 c1 d1 
a2 b2 c2 d2 
a3 b3 c3 d3 

在这种情况下,我想跳过第一列,以便获得所需的输出

 b
 b1
 b2
 b3
 c
 c1
 c2
 c3
 d
 d1
 d2
 d3

我接近了我想要的东西

awk '{for(i=2; i<=NF; print $i; i++)}'

但是这会连续打印一行中的每个条目,而不是连续地从每列中删除所有条目。

提前致谢

如果每一行都有相同数量的字段,那么你可以这样做:

awk '
{
    for(i=2;i<=NF;i++) 
        rec[i]=(rec[i]?rec[i]RS$i:$i)
}
END {
    for(i=2;i<=NF;i++) print rec[i]
}' file 

如果字段数不均匀,则需要记住哪一行具有最大字段数。

awk '
{
    for(i=2;i<=NF;i++) {
        rec[i]=(rec[i]?rec[i]RS$i:$i)
    }
    num=(num>NF?num:NF)
}
END {
    for(i=2;i<=num;i++) print rec[i]
}' file

输出:

b
b1
b2
b3
c
c1
c2
c3
d
d1
d2
d3

在这里使用cut会更容易:

# figure out how many fields
read -a fields < <(sed 1q file)
nf=${#fields[@]}

# start dumping the columns.
n=3
for ((i = n; i <= nf; i++)); do
    cut -d " " -f $i file
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM