Shell 如何在文本文件末尾添加不同的字符

Shell 如何在文本文件末尾添加不同的字符,shell,Shell,我有一个有很多记录的文本文件。 我想在第一行末尾添加| column1 | column2 | column3,然后在其余行中添加|慕尼黑| 2017|u 01.003 |城市|统计数据 我试过使用sed-I的/$/| column1 | column2 | column3/'filename.txt 但这会在所有行中添加| column1 | column2 | column3 有什么简单的方法可以做到这一点吗?使用sed来区分标题行和数据行。例如(在bash中) 输出 a|header b|

我有一个有很多记录的文本文件。 我想在第一行末尾添加
| column1 | column2 | column3
,然后在其余行中添加
|慕尼黑| 2017|u 01.003 |城市|统计数据

我试过使用
sed-I的/$/| column1 | column2 | column3/'filename.txt
但这会在所有行中添加
| column1 | column2 | column3

有什么简单的方法可以做到这一点吗?

使用
sed
来区分标题行和数据行。例如(在bash中)

输出

a|header
b|data
c|data

这里有两种方法可以产生所需的输出,一种使用
sed
,另一种使用
awk

cat filename.txt
Line #1
Line #2
Line #3
Line #4

sed -e '1,1 s/$/|column1|column2|column3/' -e '2,$ s/$/|Munich|2017_01.003|City_stats/' filename.txt
Line #1|column1|column2|column3
Line #2|Munich|2017_01.003|City_stats
Line #3|Munich|2017_01.003|City_stats
Line #4|Munich|2017_01.003|City_stats

awk 'NR == 1 {print $0"|column1|column2|column3"}; NR > 1 {print $0"|Munich|2017_01.003|City_stats"}' filename.txt
Line #1|column1|column2|column3
Line #2|Munich|2017_01.003|City_stats
Line #3|Munich|2017_01.003|City_stats
Line #4|Munich|2017_01.003|City_stats

对于awk来说,这是微不足道的。给它一个try@Tanvir:由于不同的线路处理方式不同,我会在线路上做一个循环。可以在纯shell中完成,但使用awk、Perl或Ruby要容易得多。无需
1,1s..
只需
1s/..
。可以做
sed-e'1s/..-e'1!s/…'
cat filename.txt
Line #1
Line #2
Line #3
Line #4

sed -e '1,1 s/$/|column1|column2|column3/' -e '2,$ s/$/|Munich|2017_01.003|City_stats/' filename.txt
Line #1|column1|column2|column3
Line #2|Munich|2017_01.003|City_stats
Line #3|Munich|2017_01.003|City_stats
Line #4|Munich|2017_01.003|City_stats

awk 'NR == 1 {print $0"|column1|column2|column3"}; NR > 1 {print $0"|Munich|2017_01.003|City_stats"}' filename.txt
Line #1|column1|column2|column3
Line #2|Munich|2017_01.003|City_stats
Line #3|Munich|2017_01.003|City_stats
Line #4|Munich|2017_01.003|City_stats