我认为这个问题说明了一切。我是初学者,所以请告诉我是否可行。如果不是,请给我一个更好的解决方案,因为我的bash脚本在很大程度上取决于某些awk
语句,但是大多数脚本都在bash中。我正在使用awk
bash脚本中的语句比较两个文件。基本上检查值是否相同。(请参见下面的文件)
file1.txt
Name Col1 Col2 Col3
-----------------------
row1 1 4 7
row2 2 5 8
row3 3 6 9
file2.txt
Name Col1 Col2 Col3
-----------------------
row1 1 4 7
row2 2 5 999
这是我的bash脚本的结构:
#!/bin/bash
.
.
.
awk -F '\t' '
# skips first two lines
FNR < 2 {next}
FNR == NR {
for (i = 2; i <= NF; i++) {
a[i,$1] = $i;
}
b[$1];
next;
}
($1 in b) {
for (i = 2; i <= NF; i++)
{
# does something
}
}
' file1.txt file2.txt
.
.
.
我有很多重复的代码仅在awk
语句中有用,因此我想创建一个放置在awk
语句中的函数以避免重复。这可能吗?
让我知道是否需要进一步说明。
如果您要问如何在多个脚本中重用Awk代码而不将其保存在单独的文件中,则可以定义一个shell字符串并对其进行插值。
awkfn='function foo () { print "Hiya universe" }'
awk -F : "$awkfn"'BEGIN { foo() }'
请注意,您需要如何对变量进行双引号内插,但通常需要在Awk代码中使用单引号。我将双引号字符串紧接在单引号字符串之后(它们之间没有空格),但是还有其他方法可以完成相同的操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句