使用awk向文件追加列
我有一个有点长的awk脚本,我想在文件的“右侧”附加两列。我正在处理以下文件:使用awk向文件追加列,awk,Awk,我有一个有点长的awk脚本,我想在文件的“右侧”附加两列。我正在处理以下文件: Node temporary_Temperature steady_Temperature temporary_Sight steady_Sight 1 x x - - 2 x
Node temporary_Temperature steady_Temperature temporary_Sight steady_Sight
1 x x - -
2 x x - -
3 - - - -
4 - - - -
5 x x x -
6 - - - -
7 - - - -
8 - - - -
9 - - - -
10 - - - -
11 - - - -
12 - - - -
13 x x - -
14 x x - -
15 x - - -
16 - - - -
数据已经写入一个文件,我想使用awk迭代该文件中的行,比如说,再附加两列。在标题行中,我想附加列
foo
和bar
,然后根据其他内容将x
或-
附加到每一行。我怎样才能做到这一点?因为我在一个较长的脚本中间,我不想使用SED,除非有某种方法从AWK脚本中调用SED,打印到同一个文件中。 < P>您可能面临的问题是每当AWK修改字段时,它会重新编写您的代码> 0美元< /代码>,用OFS替换IFS。如果您的FS是“任意数量的空白”(默认的FS),并且被替换为“一个空格”(默认的OFS),则会丢失格式
证明:
[ghoti@pc ~]$ printf 'one two\tthree\n'
one two three
[ghoti@pc ~]$ printf 'one two\tthree\n' | awk '{$4 = "four"} 1'
one two three four
如果您真的不想修改每行的字段,而只想导出一个字符串,则无需重写字段分隔符即可:
[ghoti@pc ~]$ printf 'one two\tthree\n' | awk '{print $0 "\tfour"}'
one two three four
在没有看到您的脚本或您想要附加的数据类型的情况下,我很难提供适用于您的情况的具体示例,但以下是一个示例:
NR == 1 {
print $0 "\tfoo\tbar";
next;
}
{
print $0 "\t" (conditionone ? "x" : "-") "\t" (conditiontwo ? "x" : "-");
}
如果您需要帮助制定条件,请将其包括在您的问题中。我在上面的代码中使用了简短的形式;显然,您可以使用printf()
将内容隔开并进行多行打印,或者根据print
中包含的两个条件设置变量
作为替代方案,您可以在浏览输入数据时重新设置格式。例如(假设问题中的尾随空格实际上是输入文件的样子):
您可能需要修改第1行的间距。如果是格式问题,请通过管道将输出通过
列-t
例如:
awk '
NR==1 {print $0, "foo", "bar"; next}
{print $0, ($2=="x"?"-":"x"), ($4=="x"?"-":"x")}
' file | column -t
输出
Node temporary_Temperature steady_Temperature temporary_Sight steady_Sight foo bar
1 x x - - - x
2 x x - - - x
3 - - - - x x
4 - - - - x x
5 x x x - - -
6 - - - - x x
7 - - - - x x
8 - - - - x x
9 - - - - x x
10 - - - - x x
11 - - - - x x
12 - - - - x x
13 x x - - - x
14 x x - - - x
15 x - - - - x
16 - - - - x x
谢谢你的详细解释;我的awk技能提高了!我的问题实际上比我在工作日结束时所能描述的要复杂一些。我正在迭代fileA并打印到fileB(fileB显示在OP中)。然后我想迭代fileC并将结果列从那里打印到文件B。实际上,我最终打印了两个文件,并使用
粘贴fileA fileC>fileB
,然后删除文件A和文件C。虽然不太漂亮,但它可以工作。如果您对这种方法有任何意见,我将不胜感激,同时也接受您的回答,因为它回答了我最初的(描述不好的)问题。
Node temporary_Temperature steady_Temperature temporary_Sight steady_Sight foo bar
1 x x - - - x
2 x x - - - x
3 - - - - x x
4 - - - - x x
5 x x x - - -
6 - - - - x x
7 - - - - x x
8 - - - - x x
9 - - - - x x
10 - - - - x x
11 - - - - x x
12 - - - - x x
13 x x - - - x
14 x x - - - x
15 x - - - - x
16 - - - - x x