33得票5回答
使用gawk将每第n行打印成一行

我有一个非常大的文件,我需要获取每个第n行并将其打印成一行。 我的数据:1 937 4.320194 2 667 4.913314 3 934 1.783326 4 940 -0.299312 5 939 2.309559 6 ...

20得票2回答
如何在awk的结果中为不同字段打印不同颜色?

这个文件有3个字段。我想要把前两个字段标记为绿色,第三个字段标记为白色(注意:黑色背景)。因此我尝试了以下代码:awk '{print "\033[0;32m"$1"\033[0m", "\033[0;32m"$2"\033[0m", "\033[0;37m"$3"\033[0m"} }' c...

138得票10回答
如何在shebang(即#!)中使用多个参数来执行awk命令?

我想使用shebang执行一个带有--re-interval的gawk脚本。 "天真"的方法是: #!/usr/bin/gawk --re-interval -f ... awk script goes here 无法正常工作,因为gawk被调用时第一个参数为"--re-interval...

12得票6回答
将固定宽度文本文件转换为CSV格式

我有一个文本格式的大型数据文件,想要通过指定每列的长度将其转换为CSV格式。 列数 = 5 每列的长度:[4 2 5 1 1] 样本观测:aasdfh9013512 ajshdj 2445df 预期输出aasd,fh,90135,1,2 ajsh,dj, 2445,d,f

102得票13回答
如何使用sed、awk或gawk仅打印匹配的内容?

我看到很多有关使用sed、awk或gawk进行搜索和替换的示例和手册。 但在我的情况下,我有一个正则表达式,想要对文本文件运行它以提取特定值。我不想进行搜索和替换。这是从bash中调用的。让我们使用一个示例: 示例正则表达式:.*abc([0-9]+)xyz.* 示例输入文件:a b c ...

7得票5回答
gawk FS将记录拆分为单个字符

如果字段分隔符为空字符串,则每个字符都成为一个单独的字段。 $ echo hello | awk -F '' -v OFS=, '{$1 = NF OFS $1} 1' 5,h,e,l,l,o 然而,如果FS是一个可能匹配零次的正则表达式,则不会发生相同的行为: $ echo hell...

11得票4回答
使用SED或AWK从另一个文件中替换所有模式

我尝试使用SED脚本进行模式替换,但它不能正常工作。 样本内容.txt288Y2RZDBPX1000000001dhana JP2F64EI1000000002d EU9V3IXI1000000003dfg1000000001dfdfds XATSSSSFOO4dhanaUXIBB7TF71...

7得票5回答
我可以使用-v选项将数组传递给awk吗?

我希望能够将一个数组变量传递给 awk。我指的不是 shell 数组,而是本地的 awk 数组。我知道我可以像这样传递标量变量: awk -vfoo="1" 'NR==foo' file 我可以使用相同的机制定义一个awk数组吗?类似这样: $ awk -v"foo[0]=1" 'N...

49得票2回答
GNU awk:在替换文本中访问捕获组

这似乎应该很简单,但是awk的gensub/gsub/sub行为对我来说一直不太清楚,现在我无法让它按照文档所说的去做(以及与其他类似工具的经验表明应该可以工作的方式)。具体而言,我想从替换字符串中访问正则表达式中的“捕获组”。以下是我认为awk语法应该如下:awk '{ gsub(/a(b*...

14得票3回答
窥视下一行,但不要消耗它。

getline函数读取下一行并将NR计数器加1。使用getline后,awk会继续处理下一行。在大多数情况下,这是期望的行为。 在我的特殊情况下,我只需要查看下一行,根据其内容读取下一行或者需要回溯到上一行。 在awk中如何回溯一行?我尝试手动设置NR计数器为NR=NR-1,但这并不起作用...