【问题标题】:Combining two bash statements into one将两个 bash 语句合并为一个
【发布时间】:2023-03-16 06:44:01
【问题描述】:

我有一些文本文件,其中有用信息的左侧有一块垃圾。该块的宽度不断变化,因此我使用awk 计算有用信息的起始列,然后使用

删除左侧的列
idx=$(awk '/START/{print index($0,"START")}' in.txt)
idx=$(($idx-3))
colrm 1 $idx < in.txt > out.txt

如何将两个连续的idx 分配合并为一个?

【问题讨论】:

  • 您的环境中是否缺少换行符? :-)
  • @paxdiablo -- 是的,我知道这不是必需的。但是找不到答案让我很困扰。我很感谢您的大量快速响应!
  • 或者,不要更新idx的值;直接使用colrm1 $((idx - 3)) &lt; in.txt &gt; out.txt即可。

标签: bash awk


【解决方案1】:

试试这个:

idx=$(( $(awk '/START/{print index($0,"START")}' in.txt) - 3 ))

或:

idx=$(awk '/START/{print index($0,"START")}' in.txt); idx=$(($idx-3))

【讨论】:

  • 谢谢 - 第一个答案是我真正想要的答案,你比@Patrice Levesque 早了几秒钟。
【解决方案2】:

你可以试试:

idx=$(( $(awk '/START/{print index($0,"START")}' in.txt) - 3 ))

【讨论】:

    【解决方案3】:

    理想的方法是使用Awk 中的END 子句在处理完所有行结束后执行操作,如下所示。此外,检查数字是否不为零的三元运算符也很方便。

    idx_3=$(awk '/START/{pos=index($0,"START")}END{print pos?(pos-3):0}' in.txt)
    

    您也可以修改三元运算符以检查pos&gt;=3,这取决于您的方便。

    Awk 中执行此操作的另一种更好的方法是使用其match() 函数并使用RSTART 标记记录开始

    idx_3=$(awk 'match($0, /START/){pos=RSTART; next}END{print pos?(pos-3):0}' in.txt)
    

    Special built-in variables in Awk

    【讨论】:

      【解决方案4】:

      真正做你想做的事情的方法是只测试一次 START 并保存它的起始位置,然后打印该值减去 3:

      idx=$(( $(awk 's=index($0,"START"){print s-3; exit}' in.txt) ))
      

      为了提高效率,添加了; exit

      【讨论】:

        【解决方案5】:
        idx=$[$(awk '/START/{print index($0,"START")}' in.txt) - 3]
        

        足够了。

        【讨论】:

        • 谢谢 - 我将学习使用 [ 而不是 ((
        • 不要使用$[...];自 90 年代后期以来,它已被弃用,取而代之的是 $((...)),甚至不再有文档记录。我不确定为什么从未真正删除支持。
        • @chepner 有趣的是,Bash 2.0 的发行说明说 $[...] 语法不再受支持,但无论出于何种原因,它仍在源代码中。
        • @BenjaminW。谢谢;您的评论使我发现NEWSChangeLog 不包含相同的信息。除了 2.0-alpha4 中的解析器更改以允许嵌套之外,更改日志没有引用 $[...]。我想知道是否应该在 4.5 中重新弃用它,以便最终在 4.6 中将其删除(我怀疑经过这么长时间,担心的是仍在使用它的任何人都忘记了它已被弃用。)
        猜你喜欢
        • 2014-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        相关资源
        最近更新 更多