【问题标题】:Control spacing in awk output控制 awk 输出中的间距
【发布时间】:2012-06-17 15:28:57
【问题描述】:

我有两个文本文件。 hash_only.txt 和 final_output.txt hash_only.txt 如下所示。

193548
401125
401275

final_output.txt 如下所示。

193548      1199687744  5698758206701808640
193548      1216464960  5698758206761818112
193548      1216464960  5698758206778417152
193548      4236691520  5698758206778945280
401125      2138607488  5698762375908890880
401125       863932288  5698762375909423360
401125      3884158848  5698762375910044160
401125      2609483648  5698762375911032320

我写了一个如下所示的脚本。

awk '
FNR==NR {
    hash[$1]
    next
}
$1 in hash {
    print $2,'\t',$3 >> "ecast_print_"$1;
}' hash_only.txt final_output.txt

对于 hash_only.txt 中的所有值,例如 193548,401125 等,我想从文件 'final_output.txt' 中提取第 2,3 列,其中第 1 列匹配 193548,401125 等并输出 第 2,3 列到 print_193548、print_401125 等。 这会产生如下所示的输出。

1133254688 5698771509078629376
1150031904 5698771509371165696
1150031904 5698771510035551232
4170258464 5698771510036082688
2895583264 5698771510036715520
1620908064 5698771510037202176
346232864 5698771510037665280
3366459424 5698771510038193664
2091784224 5698771510332259072
817109024 5698771510332816128
3837335584 5698771510333344512
2562660384 5698771510339882240

正如您在上面看到的,输出未对齐,其中第一个字段的长度小于正常值。我希望第二行从确切位置开始。我需要这个以便将其作为 gnuplot 的输入。任何帮助将不胜感激。

【问题讨论】:

    标签: bash sed awk grep gnuplot


    【解决方案1】:

    您可能会考虑使用printf 来使字段具有一致的宽度。

    此外,gnuplot 不介意文件中的字段是否未完全对齐,如果这是您想要的。只需将字段用空格分隔即可。

    【讨论】:

      【解决方案2】:

      这可能对你有用(GNU sed):

      sed 's|.*|/^& /{s/.\\{12\\}//;w ecast_print_&\n}|' hash_only.txt |
      sed -nf - final_output.txt
      

      解释:

      hash_only.txt 文件创建一个 sed 脚本,该脚本将匹配的行写入文件名 ecast_print_ 并附加密钥。从提供给 sed 脚本的输入文件中删除前 12 个字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-04
        • 2011-03-05
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多