我有一个文件,我想要打印列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++)}'
但是这会连续打印一行中的每个条目,而不是连续地从每列中删除所有条目。
提前致谢
答案 0 :(得分:1)
如果每一行都有相同数量的字段,那么你可以这样做:
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
答案 1 :(得分:1)
使用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