【问题标题】:Linux Awk - how to control output delimeterLinux Awk - 如何控制输出分隔符
【发布时间】:2014-07-29 11:06:38
【问题描述】:

我正在运行以下 awk 命令,将输入文件中的第 1 列和第 15 列投影到输出中。当输出文件用空格分隔符写入时,问题就开始了

     awk -F "|" '{print $1,$15}' 1st_rm_text_from_transactions_22_7_14.plt > manual_memos_text_from_transactions_22_7_14.plt

如何控制输出文件中的 deilmeter(我需要 | )?

谢谢

【问题讨论】:

  • 举个例子会更好。是否要将 | 作为输出字段分隔符?你的输入字段分隔符是什么?

标签: linux awk delimiter


【解决方案1】:
awk -F "|" -v OFS="|" '...code..'

awk 'BEGIN{FS=OFS="|"}{code...}'

【讨论】:

    【解决方案2】:

    您可以使用输出分隔符变量 OFS 来控制它

    awk -F "|" '{OFS="|"; print $1,$15}' 1st_rm_text_from_transactions_22_7_14.plt > manual_memos_text_from_transactions_22_7_14.plt
    

    更好的方法是添加一个开始部分,以避免每行设置变量(如其他答案和 cmets 中所建议的那样):

    awk -F "|" 'BEGIN {OFS="|"} {print $1,$15}' 1st_rm_text_from_transactions_22_7_14.plt > manual_memos_text_from_transactions_22_7_14.plt
    

    here

    【讨论】:

    • 好。在这种情况下,您也可以使用BEGIN{FS=OFS="|"}
    • 现在我明白了,您正在设置OFS 每一行。这不是非常理想的......它应该在BEGIN{} 块内,正如我之前所说,或者作为参数(Kent 建议的方式)。
    • 是的,我知道,我想要一个没有太多添加的简单解决方案。我将修改我的答案以添加开始部分。
    • 记录一下:在一个有 40k 行的文件上,两者几乎没有区别。
    • 有趣!我会说它会显着降低性能。不错。
    【解决方案3】:

    只需在打印语句中使用FS 代替逗号即可。

    awk -F"|" '{print $1FS$15}' infile > outfile
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 2011-07-19
      相关资源
      最近更新 更多