问题描述
我是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命令,则必须将输出重定向到一个临时文件,然后重命名。
假设:
-
我假设您的页眉和页脚是标准的,并且以某些字符(例如H,F,T等)或字符串(页眉,页脚,尾部等)开头
-
我假设您的原始文件以“ |”分隔。您可以在下面的awk中指定实际的分隔符。
awk -F'|' -vn = 7'{if(/ ^ Header | ^ Footer /){print} else {end =“”; for(i = 1; i
n =要重复的次数|在每一行的末尾。
^ Header | ^ Footer -如果行以“ Header”或“ Footer”开头,则按原样打印记录。您可以从文件中指定页眉和页脚字符串。
for循环-准备一个字符串“ end”,其中包含“ |” n次。
rec -包含整个记录的连接字符串,后跟结束字符串