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