我无法想出一种在bash shell中执行此操作的方法,并准备在C中执行此操作。但也许你们有一个聪明的伎俩...我有两列X / Y位置和一列数据,我希望只保留矩阵形式的数据。
示例:
0 0 A
1 0 B
2 0 C
0 1 D
1 1 E
2 1 F
0 2 G
1 2 H
2 2 I
0 3 J
1 3 K
2 3 L
应该成为:
A B C
D E F
G H I
J K L
(或换位,我不在乎)。 我不知道此操作的名称,但基本上,当第二列更改值时,应该有一个新行。
答案 0 :(得分:1)
一位cut
和pr
:
$ cut -d ' ' -f 3 test|pr -3 -a -t -s' '
A B C
D E F
G H I
J K L
cut
分隔符的' '
仅打印第3列。pr
-3
列,-a
跨越而非向下,-t
抑制页眉和页脚,' '
分隔符答案 1 :(得分:0)
以下是使用awk的一种方法:
compile ":mail:1.0.7"
答案 2 :(得分:0)
假设您的格式为"行列值"并概括你的 对随机数据流的问题,其中行和列 职位没有按特定顺序到达,您可以尝试这个脚本
#!/bin/bash
declare -A values # parameter "values" is an "A"rray
rmax=0 cmax=0 # initial count of rows and columns
# read from standard input 3 values per line
while read r c v ; do
# store the value just readen
values[$c,$r]=$v
# possibly update the final number of rows and columns
[ $r -gt $rmax ] && rmax=$r
[ $c -gt $cmax ] && cmax=$c
done
# double do loop on rows and columns, swap cycles if you prefer the transpose
for r in `seq 0 $rmax` ; do
for c in `seq 0 $cmax` ; do
# array parameters are undefined if not assigned,
# it is possible to assign a def value using the ":-" syntax
# in parameter substitution
printf "%5s" ${values[$c,$r]:-"----"}
done
printf "\n"
done
如果您不喜欢破折号,只需使用printf "%5s" ${values[$c,$r]}
使用示例
$ echo '0 2 e
3 1 f
1 0 g' | ./the_script
---- ---- e
g ---- ----
---- ---- ----
---- f ----
$