【问题标题】:Add text column to result of cat & awk [closed]将文本列添加到 cat & awk 的结果 [关闭]
【发布时间】:2021-11-30 13:00:20
【问题描述】:

我有一系列带有数字表的 .txt 文件,我从每个文件中提取我想要的数字。示例:

for f in $(find . -name "E_total_conv.txt"); do cat $f | tail -1 | awk '{print $2}' ; done

输出:

-1261.21295697266896
-1261.21748935324558
-1261.21885728710254
-1261.21737642551761
-1261.21337619301949
-1261.20719583615892

我想要的是添加第一个列,当使用 gnuplot 绘图时,它将用作 x 轴的标签。我想知道如何在其中插入一个字符串列表作为列,并且更好 - 如何指示要插入的某种数学列表?我的意思是“从 1 到 10 的偶数”,等等。

请求输出示例:

0.0    -1261.21295697266896
0.2    -1261.21748935324558
0.4    -1261.21885728710254
0.6    -1261.21737642551761
0.8    -1261.21337619301949
1.0    -1261.20719583615892

【问题讨论】:

  • for f in $(find . -name "E_total_conv.txt"); docat $f | 都是反模式。做任何你想做的事情的正确方法都不会做这些事情。

标签: bash awk find cat


【解决方案1】:

删除

| awk '{print $2}'

done之后追加

| awk '{printf("%.1f %s\n", (NR-1)/5, $2)}'

见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

【讨论】:

    【解决方案2】:

    编辑:将awk退出循环,它可以保持计数:

    for ... do ... done | awk 'BEGIN { x = 0; } { printf("%.1f %s\n", x, $2); x += 0.2; }'
    

    我的测试中的输出:

    0.0 -1261.21295697266896
    0.2 -1261.21748935324558
    0.4 -1261.21885728710254
    0.6 -1261.21737642551761
    0.8 -1261.21337619301949
    1.0 -1261.20719583615892
    

    您可以随意增加x。例如,要使它们成为一系列偶数,从 0 开始并以 2 递增。

    【讨论】:

    • 您需要将awk 排除在循环之外。
    • 好点,我会编辑答案。
    • 你不需要BEGIN { x = 0; } - 这只是将x设置为默认初始化的相同数值。
    • 当然可以,但它并没有什么坏处,而且对于阅读它的人来说,x 的初始值是什么。
    【解决方案3】:

    未经测试,因为您没有证明任何示例输入,但是:

    awk 'ENDFILE{print (ARGIND-1)/5, $2}' $(find . -name "E_total_conv.txt")
    

    假设您的文件名不包含空格并且没有太多超出 shell 最大 args 限制的空格,您可能只需要(对 ENDFILE 和 ARGIND 使用 GNU awk)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 2020-11-16
      • 2020-08-09
      • 2016-12-11
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多