我有一个包含不确定数量的列的文件,由字符分隔~
,如下所示:
1~5~4
toast~8~test
3~9~8
我如何循环遍历每一列,并将其移动到底部?我希望输出是:
1
toast
3
5
8
9
4
test
8
我知道您需要确定列数,但我不太确定如何执行此操作,然后循环并移动它们。
答案1
您可以使用rs
(reshape) 效用
- 首先转置,用作
~
列分隔符 - 然后重塑为单列
前任。
$ rs -c~ -T < file | rs 0 1
1
toast
3
5
8
9
4
test
8
或者,使用 Awk:
$ awk -F~ '
{for (i=1;i<=NF;i++) a[i] = a[i] == "" ? $i : a[i] "\n" $i}
END {for (i in a) print a[i]}
' file
1
toast
3
5
8
9
4
test
8
答案2
$ perl -F'~' -lane '
$A[$_][$.-1] = $F[$_] for 0 .. $#F;}{
print join $/, @{$A[$_]} for 0 .. $#A;
' input.file
将列收集并存储在多维数组中,以便第一个索引引用列号,第二个索引引用行号。然后在最后循环 col num 并打印由换行符分隔的每个数组元素。