给出以下命令:
echo "1: " | awk '/1/ -F ":" {print $1}'
Run Code Online (Sandbox Code Playgroud)
为什么awk输出:
1:
Run Code Online (Sandbox Code Playgroud) 我想在awk中打印第二个最后一列或字段.字段数是可变的.我知道我应该可以使用,$NF但不知道如何使用它.
这似乎不起作用:
awk ' { print ( $NF-- ) } '
Run Code Online (Sandbox Code Playgroud) 我想用shebang 执行一个gawk脚本--re-interval."幼稚"的方法
#!/usr/bin/gawk --re-interval -f
... awk script goes here
Run Code Online (Sandbox Code Playgroud)
不起作用,因为gawk是用第一个参数调用的"--re-interval -f"(不是在空白处分开),它不明白.有解决方法吗?
当然你可以不直接调用gawk,而是将它包装成一个分割第一个参数的shell脚本,或者创建一个shell脚本,然后调用gawk并将脚本放到另一个文件中,但我想知道是否有某种方法可以做这在一个文件中.
shebang行的行为因系统而异 - 至少在Cygwin中它不会通过空格分割参数.我只关心如何在一个行为类似的系统上做到这一点; 该脚本不是便携式的.
我看到很多关于如何使用sed,awk或gawk进行搜索和替换等操作的示例和手册页.
但在我的情况下,我有一个正则表达式,我想对文本文件运行以提取特定的值.我不想做搜索和替换.这是从bash调用的.我们来举个例子:
正则表达式示例:
.*abc([0-9]+)xyz.*
Run Code Online (Sandbox Code Playgroud)
示例输入文件:
a
b
c
abc12345xyz
a
b
c
Run Code Online (Sandbox Code Playgroud)
听起来很简单,我无法弄清楚如何正确调用sed/awk/gawk.我希望做的是,在我的bash脚本中有:
myvalue=$( sed <...something...> input.txt )
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情包括:
sed -e 's/.*([0-9]).*/\\1/g' example.txt # extracts the entire input file
sed -n 's/.*([0-9]).*/\\1/g' example.txt # extracts nothing
Run Code Online (Sandbox Code Playgroud) 这看起来应该很简单,但awk gensub/gsub/sub行为对我来说一直不清楚,现在我无法让它做文档说应该做的事情(以及有多少经验)其他类似的工具建议应该工作).具体来说,我想从替换字符串中的正则表达式访问"捕获的组".这是我认为awk语法应该是:
awk '{ gsub(/a(b*)c/, "Here are bees: \1"); print; }'
Run Code Online (Sandbox Code Playgroud)
那应该把"abbbc"变成"这里有蜜蜂:bbb".在Ubunutu 9.04中,它至少不适合我.相反,"\ 1"呈现为^ A; 也就是说,代码的字符1.当然不是我想要的.我该怎么做呢?
谢谢.
有没有办法打印OFS分隔的所有记录而不输入每个列号.
#Desired style of syntax, undesired result
[kbrandt@glade: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-( "}; {print $0}'
1 2 3 4
#Desired result, undesired syntax
[kbrandt@glade: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-) "}; {print $1,$2,$3,$4}'
1 :-) 2 :-) 3 :-) 4
Run Code Online (Sandbox Code Playgroud) 这是一个awk脚本,它尝试根据第一列设置两个文件的差异:
BEGIN{
OFS=FS="\t"
file = ARGV[1]
while (getline < file)
Contained[$1] = $1
delete ARGV[1]
}
$1 not in Contained{
print $0
}
Run Code Online (Sandbox Code Playgroud)
这是TestFileA:
cat
dog
frog
Run Code Online (Sandbox Code Playgroud)
这是TestFileB:
ee
cat
dog
frog
Run Code Online (Sandbox Code Playgroud)
但是,当我运行以下命令时:
gawk -f Diff.awk TestFileA TestFileB
Run Code Online (Sandbox Code Playgroud)
我得到的输出就像脚本包含"in"一样:
cat
dog
frog
Run Code Online (Sandbox Code Playgroud)
虽然我不确定"不在"是否是我的意图的正确语法,但我很好奇为什么它的行为与我写"in"时的行为完全相同.
我有一个非常大的文件,我需要获取每个第n行并将其打印成一行.
我的数据:
1 937 4.320194
2 667 4.913314
3 934 1.783326
4 940 -0.299312
5 939 2.309559
6 936 3.229496
7 611 -1.41808
8 608 -1.154019
9 606 2.159683
10 549 0.767828
Run Code Online (Sandbox Code Playgroud)
我希望我的数据看起来像这样:
1 937 4.320194
3 934 1.783326
5 939 2.309559
7 611 -1.41808
9 606 2.159683
Run Code Online (Sandbox Code Playgroud)
这当然是一个例子,我想要我的巨大数据文件的每10行.到目前为止我试过这个:
NF == 6 {
if(NR%10) {print;}
}
Run Code Online (Sandbox Code Playgroud) 我意识到awk有关联数组,但我想知道是否有一个等同于此的awk:
http://php.net/manual/en/function.array-push.php
明显的解决方法是说:
array[$new_element] = $new_element
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不那么可读,而且比它需要的更加黑客.