首页 > 解决方案 > bash中的表格单元格排序

问题描述

我需要按排序顺序放置每个第 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 剪切排序的管道,但这似乎不是一个好主意。有什么建议去哪里挖吗?

标签: bashshellsortingunix

解决方案


这可以用一个小的 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


推荐阅读