【问题标题】:Can I use awk to specify in which column to place string?我可以使用 awk 指定在哪一列中放置字符串吗?
【发布时间】:2014-03-24 23:21:29
【问题描述】:

我有一个名为 test.txt 的制表符分隔文本文件,其中包含多个列,我试图将其与另一个名为 output.txt 的文件相同。

test.txt 如下所示

    t   m  sx  sy  sz  rx   ry   rz

49.07   0   -1.00   0.00   -0.11   20.00   0.00   -2.18

49.47   0   -1.00   0.00   -0.11   22.00   0.00   -2.33

50.89   0   -1.00   0.00   -0.11   34.00   0.00   -3.21

.
:

42.06  0    29.00   0.00   -2.86   12.00   0.00   -1.44

问题是,无论我使用哪种类型的分隔符,它仍然不会与名为 output.txt 的所需输出文件具有相同的格式

在output.txt中,所有这些列都有一个特定的位置,所以

    t        m     sx      sy        sz      rx       ry     rz
Ln1,col1    Ln1,col9    Ln1,col17    Ln1,col25    Ln1,col33  Ln1,col41  Ln1,col49 Ln1,col57 

我对 awk、sed 和大多数其他 unix 命令有点陌生。有什么建议吗?

【问题讨论】:

  • 我只是把标题栏放在了解释的目的。原始文件没有标题,只有数字字符。

标签: sed awk grep


【解决方案1】:

你尝试过这样的事情吗?

awk -F 'BEGIN{print "t\tm\tsx\tsy\tsz\trx\try\trz"}{print $1"\t"$9"\t"$17"\t"$25"\t"$33"\t"$41"\t"$49}' test.txt

在开头打印标题,然后为每一行打印所需的列

【讨论】:

  • 尝试了不带标题的建议并将其通过管道传输到输出文件中,但没有运气。 :(
  • 以最简单的形式,我想做这样的事情:从 test.txt 中取出第 1 列,并将其通过管道传输到第 1 列的 output.txt 中。然后从 test.txt 中取出第 2 列并将其通过管道传输到 output.txt 第 9 列。因此,test.txt 中的每一列都应放置在 output.txt 中的特定位置,该位置由列号定义。可能没有任何分隔符,因为输出文件中有空列?
  • 您希望输出文件中测试列的确切位置是什么?
  • 设法在每列之间使用一定数量的空格来获得所需的输出。现在我只需要找到对每一列使用左对齐的方法。 awk '{print $1" "$2" "$3" "$4" "$5" "$6" "$7" "$8}' test.txt > output.txt
  • 我认为只要稍微修改一下代码,AWK/GAWK printf 就可以完成这项工作:gnu.org/software/gawk/manual/html_node/Printf-Examples.html
【解决方案2】:

printf 的示例:

awk '{for (i=1;i<=NF;i++) printf(\"%-9s\", $i); print}' file

more examples

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 2013-07-19
    • 2023-03-23
    • 1970-01-01
    • 2015-04-09
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多