我认为这个问题不言而喻。我是初学者,所以如果可能,请告诉我。如果没有,那么你给我一个更好的解决方案,因为我的bash脚本在很大程度上依赖于某些awk
语句,但是大部分脚本都是bash。我在bash脚本中使用awk
语句比较两个文件。基本上检查值是否相同。 (见下面的文件)
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
语句中的函数,以避免重复。这可能吗?
如果需要进一步说明,请与我们联系。
答案 0 :(得分:6)
当然,只需定义功能:
awk '
function foo() {
print "Hello World"
}
BEGIN {
foo()
foo()
}
'
答案 1 :(得分:3)
如果您问如何在多个脚本中重用一段Awk代码而不将其保存在单独的文件中,您可以定义一个shell字符串并对其进行插值。
awkfn='function foo () { print "Hiya universe" }'
awk -F : "$awkfn"'BEGIN { foo() }'
注意你需要如何插入变量的双引号,但通常需要围绕Awk代码的单引号。我在一个单引号字符串旁边放了一个带双引号的字符串(它们之间没有空格)但是还有其他方法可以完成同样的事情。