使用UNIX在每行的末尾添加管道定界符

问题描述

我是unix命令的新手,如果我使用的代码行不正确,请原谅。

我在winscp上有带有页眉和页脚的文件(xxxx.txt.date)。现在,我想在所有文件的第二行(从第二行到第二行)的每一行的末尾添加N个管道(|)。 (我不想在页眉和页脚中使用|)。

现在我创建了一个脚本,其中我正在使用以下命令:

sed  -e "2,\$s/$/|/" $file | column -t

2,$s/$/|/: adds | at the end of every line from line 2 现在下面是我面临的问题

第一

  • 我看不到配置单元中每行末尾添加管道的文件中的数据没有更改,我该如何更改文件中的数据?
  • 我不想要|在页脚中。

任何建议或帮助将不胜感激。

谢谢!

解决方法

如果您只需要附加一个“ |”在每行的末尾(页眉和页脚除外)

sed -i '1n; $n; s/$/|/' file_name

1n; $ n; :仅按原样打印第一行和最后一行。
-i :对文件进行更改,而不是打印到STDOUT。

如果您需要在每行的末尾附加n个管道(页眉和页脚除外)。如果您使用以下awk命令,则必须将输出重定向到一个临时文件,然后重命名。

假设:

  1. 我假设您的页眉和页脚是标准的,并且以某些字符(例如H,F,T等)或字符串(页眉,页脚,尾部等)开头

  2. 我假设您的原始文件以“ |”分隔。您可以在下面的awk中指定实际的分隔符。

    awk -F'|' -vn = 7'{if(/ ^ Header | ^ Footer /){print} else {end =“”; for(i = 1; i

n =要重复的次数|在每一行的末尾。
^ Header | ^ Footer -如果行以“ Header”或“ Footer”开头,则按原样打印记录。您可以从文件中指定页眉和页脚字符串。
for循环-准备一个字符串“ end”,其中包含“ |” n次。
rec -包含整个记录的连接字符串,后跟结束字符串