如何在制表符分隔的文件末尾添加一个新列,其中包含每行的相同值。
例如:
保存文件
Name Age Address Sex
X 12 adrs1 M
Y 15 adrs2 F
Z 10 adrs3 M
我想为每一行添加另一个包含相同值'st.xaviers'的列'School'
输出文件
Name Age Address Sex School
X 12 adrs1 M st.xaviers
Y 15 adrs2 F st.xaviers
Z 10 adrs3 M st.xaviers
我尝试awk '{print $0, "School"}
添加该列。如何将“st.xaviers”添加到“学校”列的每一行?
现在,如果这是 shell 脚本的一部分,并且我有一个预定义变量 School=st.xaviers。
如何$School
向“学校”栏添加值 outfile.txt
答案1
我发誓同样的问题几周前就被问过并回答过...但我找不到它。
配方如下:
- 检查第一列是否为“姓名”,如果是,则打印行 TAB 和“学校”;完成后跳至下一行
- 所有其他非空行($1 存在)必须打印以下 TAB 和“st.xaviers”
例如:
awk -vschool="$School" '$1=="Name" { print $0 "\tSchool"; next}; $1 {print $0 "\t" school}'
或者
export School
awk '$1=="Name" { print $0 "\tSchool"; next}; $1 {print $0 "\t" ENVIRON["School"]}'
前者使用 -v 定义一个 awk 变量,后者在出口让它看到学校。
答案2
如果允许 Perl 作为 awk 的超集:
perl -p -i -e 's/Sex$/Sex\tSchool/ or s/$/\tst.xaviers/'
我想象在 awk (或 sed) 中也可以实现类似的构造。