【问题标题】:How to append a tab to the end of every line in a text file如何将制表符附加到文本文件中每一行的末尾
【发布时间】:2013-06-24 07:11:28
【问题描述】:

我有一个格式如下的文本文件:

FirstName   LastName  
Georges     Bernard
Henry       Grey

名字与第二个名字之间用制表符 (\t) 分隔。 我想在文件的每一行附加一个年龄字段(它也应该通过制表符与姓氏字段分开)。

最终文件应如下所示:

FirstName    LastName    Age
Georges      Bernard     20
Henry        Grey        20

【问题讨论】:

  • 年龄字段从何而来?
  • 你的年龄从哪里来的?
  • @JS 我想为年龄字段提供一个常数,一个常数字符串作为输入。该输入应附加到所有行。
  • 年龄应由用户手动输入。例如:TabAppender "\t20" myFile.txt
  • @ctn 我想让制表符后跟一个字符串。这行得通吗? sed 's/$/\t20/'

标签: linux sed awk text-processing


【解决方案1】:

awk:

awk '{$0=NR>1?$0"\t20":$0"\tAge"}1' myFile.txt

sed:

sed '1s/$/\tAge/;2,$s/$/\t20/' myFile.txt

演示:

$ cat myFile.txt
FirstName   LastName  
Georges     Bernard
Henry       Grey

$ awk '{$0=NR>1?$0"\t20":$0"\tAge"}1' myFile.txt
FirstName   LastName    Age
Georges     Bernard     20
Henry       Grey        20

$ sed '1s/$/\tAge/;2,$s/$/\t20/' myFile.txt
FirstName   LastName    Age 
Georges     Bernard     20
Henry       Grey        20

【讨论】:

    【解决方案2】:
    #!/bin/bash
    age="${1:?must supply age as argument 1}"
    shift
    sed "s/$/       $age/" "$@"
    

    其中的空格序列代表源代码中的实际制表符。有一些方法可以在不使用显式选项卡的情况下将选项卡放入源代码,例如:

    #!/bin/bash
    age="${1:?must supply age as argument 1}"
    shift
    sed "s/$/"$'\t'"$age/" "$@"
    

    两个版本的代码都需要 $1 中的“年龄”参数,并接受零个或多个要处理的文件名(如果没有给出文件名,则处理标准输入)。

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 2014-11-13
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 2011-09-06
      相关资源
      最近更新 更多