小编Chr*_*our的帖子

awk:从一组线中打印三行

我有一个包含行组的文本文件,从中我只需要每组中的前三行.

文件:

test1|pass
test1|pass
test1|pass
test1|pass
test1|pass
test2|fail
test2|fail
test2|fail
test2|fail
test3|pass
test3|pass
test3|pass
test3|pass
Run Code Online (Sandbox Code Playgroud)

预期产出:

test1|pass
test1|pass
test1|pass
test2|fail
test2|fail
test2|fail
test3|pass
test3|pass
test3|pass
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试了什么:

BEGIN {
        FS = "|"
}
        $1==x {
        if (NR % 5 <= 3) {
                print $0
        }
        next
}
{
        x=$1
        print $0
}

END {
        printf "\n"
}
Run Code Online (Sandbox Code Playgroud)

perl awk

2
推荐指数
1
解决办法
361
查看次数

删除图案之间的空白行

我希望用sed或awk删除文件中的空行(换行,制表符和空格),但前提是这些空行在两个模式之间.

lorem lorem PATTERN1

\t

PATTERN2 lorem2 lorem2`
Run Code Online (Sandbox Code Playgroud)

我期望下面的结果是两个模式的两行连接.

lorem lorem PATTERN1PATTERN2 lorem2 lorem2
Run Code Online (Sandbox Code Playgroud)

linux awk sed

2
推荐指数
1
解决办法
1299
查看次数

Regex Golf:在最后一个"/"之后切掉一切

这个问题纯粹是化妆的:

我想在给定字符串的最后一个"/"之后删除所有文本.所以如果输入是

mkdir -p $DEST/Users/Peter/Dropbox/Public/Vacation/P1000891.jpg
Run Code Online (Sandbox Code Playgroud)

输出应该是

mkdir -p $DEST/Users/Peter/Dropbox/Public/Vacation/
Run Code Online (Sandbox Code Playgroud)

(确切地说,输出中是否包含最后一个"/"并不重要.)

我发现了各种方法,例如:

my @templist = split "/", 'mkdir -p $DEST/Users/Peter/Dropbox/Public/Vacation/P1000891.jpg';
print join "/", splice(@templist, 0, -1);
Run Code Online (Sandbox Code Playgroud)

要么:

my ($a) = 'mkdir -p $DEST/Users/Peter/Dropbox/Public/Vacation/P1000891.jpg' =~ /(.*\/)+(?:[^\/]+)/;
print $a;
Run Code Online (Sandbox Code Playgroud)

但我认为这应该只使用正则表达式,也许搜索和替换可以实现?也许有先见之明?

regex perl

2
推荐指数
1
解决办法
3956
查看次数

grep一行中有多个字符串

我需要检查"添加/更改/修复/删除"字符串是否在提交日志消息中.我正在编写一个svn precommit钩子,并且预期的提交注释应该在消息中包含这4个字符串中的一个.

我使用的代码如下

REPOS=$1
TXN=$2

SVN="/usr/bin/svn";
SVNLOOK="/usr/bin/svnlook";

$SVNLOOK log "$REPOS" -t "$TXN" | \
grep "[a-zA-Z0-9]" > /dev/null

GREP_STATUS=$?
if [ $GREP_STATUS -ne 0 ]
then
  "${ECHO}" "No Log comments present" >> "${LOG}"
   echo "Your commit has been blocked because you didn't give any log message" 1>&2
   echo "Please write a log message describing the purpose of your changes and" 1>&2
   echo "then try committing again. -- Thank you" 1>&2
exit 1
fi
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,

$SVNLOOK log "$REPOS" -t "$TXN"
Run Code Online (Sandbox Code Playgroud)

将给我用户输入的提交消息.现在我必须检查消息中是否存在任何字符串"已添加,已更改,已修复,已删除".那是, …

unix shell grep pre-commit-hook

2
推荐指数
2
解决办法
3万
查看次数

shell脚本,其中bc失去精度

#! /bin/sh
a1=260
a2=9150
echo "$a1 * 100 / $a2" | bc
Run Code Online (Sandbox Code Playgroud)

输出是

2
Run Code Online (Sandbox Code Playgroud)

它应该在哪里

2.8415
Run Code Online (Sandbox Code Playgroud)

虽然我正在使用,为什么精度会丢失bc

math shell bc

2
推荐指数
1
解决办法
2514
查看次数

Fortran算术异常

这是一个简短的问题,但我试图尽可能详细地提供.

我正在编译一个旧的,但仍然积极开发的fortran代码(f77标准)在Scientific Linux上.这段代码的推荐编译器是ifort和gfortran.使用gfortran我可以编译并运行此代码.但是,如果我使用DEBUG = 1标志进行编码,则代码会编译,但会以SEG FAULT终止.单步执行gdb会导致以下错误来源:

REAL*4 TIME_CURRENT     
CALL CPU_TIME(TIME_CURRENT) 
ISECS = 100*INT(TIME_CURRENT)  
Run Code Online (Sandbox Code Playgroud)

该计划终止于:

Program received signal SIGFPE, Arithmetic exception. 
timer (init=1, isecs=0) at myprog.f:1818
1818 ISECS = 100*INT(TIME_CURRENT)
Run Code Online (Sandbox Code Playgroud)

如果我在第1818行停止执行并检查ISECS和TIME_CURRENT,我得到:

(gdb) ptype(TIME_CURRENT)
type = real(kind=4)
(gdb) ptype(ISECS)
type = integer(kind=4)
Run Code Online (Sandbox Code Playgroud)

我试过更具体和使用:

ISECS = 100*INT(TIME_CURRENT,4)
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.我没有看到这可能等同于算术错误?

我的(生成文件生成)调试编译标志是:

gfortran -fno-automatic -m32 -O0 -g \
         -ffpe-trap=invalid,zero,overflow,underflow,precision -static-libgfortran
Run Code Online (Sandbox Code Playgroud)

当我编译出调试时,我不再收到SEG FAULT但是我的编译标志是

gfortran -fno-automatic -m32 -O2 -ffast-math -static-libgfortran
Run Code Online (Sandbox Code Playgroud)

我不是一个强大的程序员,所以任何帮助将不胜感激.请注意,我正在64位系统上进行编译,但强制进行32位编译,因为这是必需的.

fortran gfortran

2
推荐指数
1
解决办法
1886
查看次数

sed和awk正则表达式有什么区别

我有一个awk和一个sed示例.两者似乎都使用相同的正则表达式,但输出不同.因此,模式扩展必须变得不同.但我无法得到差异.谁能解释一下?

 $ echo "THE BEAR ATE THE FISH" |sed -e 's/[^ ]*(H|F)[^ ]*/<red>&/g'
THE BEAR ATE THE FISH
 $ echo "THE BEAR ATE THE FISH" | awk 'gsub(/[^ ]*(H|F)[^ ]*/,"<red>&")'
<red>THE BEAR ATE <red>THE <red>FISH
 $ sed --version
GNU sed version 4.1.5
 $ awk --version
GNU Awk 3.1.5
Run Code Online (Sandbox Code Playgroud)

regex bash awk sed

2
推荐指数
1
解决办法
1722
查看次数

使用awk从文件中提取数据

我有一个如下数据集

first 0 1
first 1 2
first 2 3
second 0 1
second 1 2
second 2 3
third 0 1 
third 1 2
third 2 3
Run Code Online (Sandbox Code Playgroud)

我需要检查此文件并提取第一,第二和第三列的第三列,并将它们存储在不同的文件中.

输出文件应包含:

1
2
3
Run Code Online (Sandbox Code Playgroud)

awk

2
推荐指数
1
解决办法
524
查看次数

打印实际的字段分隔符值而不是正则表达式

鉴于以下输入:

check1;check2
check1;;check2
check1,check2
Run Code Online (Sandbox Code Playgroud)

awk命令:

awk -F';+|,' '{print $1 FS $2}'
Run Code Online (Sandbox Code Playgroud)

FS 应该包含选定的分隔符?

如何打印选定的分隔符,描述分隔符的正则表达式之一;,;;或者,不是.

如果输入check1;check2则输出应该是check1;check2.

regex awk gawk delimiter

2
推荐指数
1
解决办法
86
查看次数

快速从 .npy 转换为 MLMultiArray 以进行 CoreML 预测

我已将 PyTorch 模型导出到 CoreML,并希望快速进行推理。我将输入数据作为 2D float32 numpy ndarray 存储在磁盘上.npy,并且需要快速加载到 aMLMultiArray中。有没有方便的方法来做到这一点?

numpy swift pytorch coreml

2
推荐指数
1
解决办法
497
查看次数

标签 统计

awk ×5

regex ×3

perl ×2

sed ×2

shell ×2

bash ×1

bc ×1

coreml ×1

delimiter ×1

fortran ×1

gawk ×1

gfortran ×1

grep ×1

linux ×1

math ×1

numpy ×1

pre-commit-hook ×1

pytorch ×1

swift ×1

unix ×1