[英]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.