制表符分隔文件中的新列,具有预定义值

制表符分隔文件中的新列,具有预定义值

如何在制表符分隔的文件末尾添加一个新列,其中包含每行的相同值。

例如:

保存文件

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) 中也可以实现类似的构造。

相关内容