0

我需要按排序顺序放置每个第 2 列和第 3 列的单元格。因此,如果 X[N][2] > X[N][3],我需要交换 X[N][2] 和 X[N][3],其中 X - 矩阵,N - 我拥有的任何自然数像这样的表文件:

A 9 1 2
B 8 7 F
C 2 4 X
D 3 1 1

我需要得到这个:

A 1 9 2
B 7 8 F
C 2 4 X
D 1 3 1

所以行顺序保持不变,但一些单元格 X[i][2] 和 X[i][3] 被交换了。

我考虑过使用带有xargs 剪切排序的管道,但这似乎不是一个好主意。有什么建议去哪里挖吗?

4

2 回答 2

0

这可以用一个小的 awk 脚本来解决:

# Swap X[N][2] and X[N][3] if X[N][2] > X[N][3]
$2 > $3 {
  tmp = $3
  $3 = $2
  $2 = tmp
}

# Print row
1

要在脚本或 shell 中将其用作单行:awk '$2 > $3 { tmp = $3; $3 = $2; $2 = tmp } 1' inputfile.txt

于 2020-12-08T14:03:03.903 回答
0
awk '$2 > $3 {  temp3=$3;$3=$2;$2=temp3 }1' file

使用 awk。如果第二个空格分隔的字段大于第三个,则将临时变量 (temp3) 设置为第三个空格分隔的字段,将第三个字段设置为第二个,将第二个设置为临时变量。用简写打印所有行 1

于 2020-12-08T14:04:45.673 回答