【问题标题】:Table cell-only sorting in bashbash中的表格单元格排序
【发布时间】:2021-03-19 20:23:02
【问题描述】:

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

【问题讨论】:

  • 不确定cellsmatrixtable file 是关于什么的……看起来像一个带有行和列的平面文件……我错过了什么?您提到了xargscutsort ...请发布到目前为止编写的代码;假设这个 is 只是一个平面文件并且您想要交换/排序第 2 列和第 3 列,我可能会考虑使用 awk(也可以查看 awk's ternary 运算符)

标签: bash shell sorting unix


【解决方案1】:
awk '$2 > $3 {  temp3=$3;$3=$2;$2=temp3 }1' file

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 2018-07-05
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多