AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[syntax](unix)

Martin Hope
stormctr2
Asked: 2022-02-13 16:01:05 +0800 CST

平均文件的一列

  • -1

我有一个 CSV 文件(带有时间戳数据),我有一个脚本,可以将一年中的每个月分成一个单独的文件。该脚本将花费该月并将数据平均为单个值。部分代码如下;所有其他月份将与一月份的第一个月份相同。该代码将根据第 9 列(月份编号为 1-12)将长达一年的文件分成月份,并将打印所有 17 个字段。下一个代码行是查看第 13 列并平均文件中的所有数据(忽略所有丢失的数据,指定为 -999)并将列平均值打印到新的 $i.monthlyavg 文件。

awk -F ',' '$9= 1 {print $0}' $i > Jan.tmp
awk 'NR > 1 { for i = 13) if ($i != -999) {sum[i] += $i; num[i]++}
END { for (i = 13) print i, sum[i], num[i], sum[i]/num[i] }' Jan.tmp > $i.monthlyavg

我收到以下错误消息.....

awk: cmd. line:1: NR > 1 { for i = 13) if (01-073-1003-SO2-1998.dat.out != -999) {sum[i] += 01-073-1003-SO2-1998.dat.out; num[i]++}
awk: cmd. line:1:              ^ syntax error
awk: cmd. line:1: NR > 1 { for i = 13) if (01-073-1003-SO2-1998.dat.out != -999) {sum[i] += 01-073-1003-SO2-1998.dat.out; num[i]++}
awk: cmd. line:1:                    ^ syntax error
awk: cmd. line:1: NR > 1 { for i = 13) if (01-073-1003-SO2-1998.dat.out != -999) {sum[i] += 01-073-1003-SO2-1998.dat.out; num[i]++}
awk: cmd. line:1:                                                  ^ syntax error
awk: cmd. line:1: NR > 1 { for i = 13) if (01-073-1003-SO2-1998.dat.out != -999) {sum[i] += 01-073-1003-SO2-1998.dat.out; num[i]++}
awk: cmd. line:1:                                                              ^ syntax error
awk: cmd. line:1: NR > 1 { for i = 13) if (01-073-1003-SO2-1998.dat.out != -999) {sum[i] += 01-073-1003-SO2-1998.dat.out; num[i]++}
awk: cmd. line:1:                                                                                                   ^ syntax error

和

 END { for (i = 13) print i, sum[i], num[i], sum[i]/num[i] }
awk: cmd. line:2:       ^ syntax error
awk: cmd. line:2:       END { for (i = 13) print i, sum[i], num[i], sum[i]/num[i] }
awk: cmd. line:2:                        ^ syntax error
awk: cmd. line:2:       END { for (i = 13) print i, sum[i], num[i], sum[i]/num[i] }
awk: cmd. line:2:                                                                  ^ unexpected newline or end of string

问题是什么?

awk syntax
  • 2 个回答
  • 52 Views
Martin Hope
YardenST
Asked: 2020-01-10 02:39:47 +0800 CST

`foo=bar programname` 是什么意思[重复]

  • 0
这个问题在这里已经有了答案:
为什么内联变量定义有效,但前一行不适用于 aws 命令?[重复] (1 个回答)
2年前关闭。

在开发 React 应用程序时,我需要使用一些环境变量。这样做的方法是使用以下语法:

REACT_APP_NOT_SECRET_CODE=abcdef npm start

见参考

我的第一个问题是:它是如何工作的?我不知道这个linux的东西,幕后发生了什么?

我的第二个问题是:如何提高可扩展性?说我有看起来像这样的文件

MY_VAR_1=123
MY_VAR_2=23332
MY_VAR_3=3232

如何将其注入 npm 进程?我试过了

cat .env | npm start 

但它不起作用

我想在我理解了 linux 语法之后,我可以更好地使用文件而不是内联数据。

谢谢

linux syntax
  • 1 个回答
  • 31 Views
Martin Hope
Kyan Hamad
Asked: 2019-02-23 08:46:25 +0800 CST

意外标记“elif”附近的语法错误

  • 0

我在第 7 行得到错误。有任何想法吗?我检查了空格,没有。

#!/bin/bash
if test $# -eq 0
then
    echo "No arguments"
elif test $# -eq 1
    echo "$1"
elif test $# -eq 2
    echo "$1 $2"
else
    echo "More than 2 arguments"
fi
bash syntax
  • 2 个回答
  • 2035 Views
Martin Hope
rien333
Asked: 2018-09-25 10:18:18 +0800 CST

有提醒提前几天发出通知

  • 5

我一直在尝试使用 Unix 程序remind,到目前为止我很享受这种灵活性。我已经设置了这个命令来警告我任何即将到来的提醒:

~$ remind -z -k'notify-send "Reminder"  "%s"' .reminders/reminders.rem

它可以工作,但由于某种原因,它不尊重remind' 提前几天开始警告的功能(尽管它会持续几分钟),例如,像这样的提醒不会为-k标志中列出的命令提供输出:

REM September 28 +5 AT 20:11 +1 Get some foo bar %b

此时,上述示例只会notify-send在 9 月 28 日 20:11 前一分钟触发(并且由于某种原因不会在其他任何日子触发)。我想notify-send提前 5 天触发(在本例中),然后每天触发。我如何实现这一目标?(不同的语法也可以,但其他人也没有达到我想要的)

remind syntax
  • 1 个回答
  • 624 Views
Martin Hope
mf94
Asked: 2018-09-18 01:29:58 +0800 CST

在 awk 中使用 bash 数组并引用变量:语法冲突问题

  • 3

我有一个脚本,其目的是:

  • 对于文件列表,获取每个文件的特定编号(具体来说,这是测序数据)并将这些存储到 array1
  • 使用array1,找到最小的数是array1
  • 根据 array1 中最小的数字,将它除以 array1 中的所有数字,得到 array2。

我的脚本如下所示:

#!/usr/bin/bash



USAGE() { echo "Usage: bash $0 [-b <in-bam-files-dir>] [-o <out-dir>] [-c <chromlen>]" 1>&2; exit 1; }

if (($# == 0))
then
    USAGE
fi



while getopts ":b:o:c:h" opt
do
    case $opt in
        b ) BAMFILES=$OPTARG
        ;;
        o ) OUTDIR=$OPTARG
        ;;
        c ) CHROMLEN=$OPTARG
        ;;
        h ) USAGE
        ;;
        \? ) echo "Invalid option: -$OPTARG exiting" >&2
        exit
        ;;
        : ) echo "Option -$OPTARG requires an argument" >&2
        exit
        ;;
    esac
done



if [ ! -d ${OUTDIR} ]
then
    mkdir ${OUTDIR}
fi

if [ ! -d ${OUTDIR}/temp ]
then
    mkdir ${OUTDIR}/temp
fi

if [ -d ${BAMFILES} ]
then
    echo -e "\nProcessing BAM files from following directory: ${BAMFILES} \n "
fi



module purge
module load samtools
module load bedtools
module load ucsctools
echo -e "Modules are loaded\n"



FIRSTBAM=$(ls $BAMFILES/*bam | head -1)
MIN=$(samtools view -c -F 260 ${FIRSTBAM} )
echo -e "Minimum number of reads is currently set to $MIN from $FIRSTBAM (first bam in directory)\n"



declare -A BAMREADS
echo "BAMREADS array is initialized"

for i in $(ls $BAMFILES/*bam)
do
    echo "Counting reads in $i "
    BAMREADS[$i]=$(samtools view -c -F 260 $i)
done



for i in ${BAMREADS[@]}
do
    if [[ $i -lt $MIN ]]
    then
        MIN=$i
    fi
done

echo -e "Minimum number of reads that will be used for scaling is $MIN \n"



declare -A BAMFRACS
echo -e "BAMFRACS array is initialized"

for i in ${!BAMREADS[@]}
do
    BAMFRACS[$i]=$(awk -v var1=${MIN} -v var2=${BAMREADS[$i]} 'BEGIN { x= var1 / var2; printf "%.8f", x }')
done



for i in $(ls $BAMFILES/*bam)
do

    SAMPLE=`basename $i`
    SAMPLE=${SAMPLE%.bam}
    echo $SAMPLE

    if [[ ${BAMREADS[$i]} -eq $MIN ]]
    then

        echo "Sample $i does not need scaling"

        command="cp $i ${OUTDIR}/temp/${SAMPLE}.scaled.bam;
        genomeCoverageBed -bg -split -ibam ${OUTDIR}/temp/${SAMPLE}.scaled.bam > ${OUTDIR}/temp/${SAMPLE}.bedgraph;
        sed -e 's/^/chr/g;s/MT/M/g' ${OUTDIR}/temp/${SAMPLE}.bedgraph > ${OUTDIR}/temp/${SAMPLE}.modified.bedgraph;
        sort -k1,1 -k2,2n ${OUTDIR}/temp/${SAMPLE}.modified.bedgraph > ${OUTDIR}/temp/${SAMPLE}.sorted.bedgraph;
        bedGraphToBigWig ${OUTDIR}/temp/${SAMPLE}.sorted.bedgraph $CHROMLEN ${OUTDIR}/${SAMPLE}.bw"
        #rm ${OUTDIR}/temp/${SAMPLE}.*

    else

        command="samtools view -s ${BAMFRACS[$i]} -b $i > ${OUTDIR}/temp/${SAMPLE}.scaled.bam;
        genomeCoverageBed -bg -split -ibam ${OUTDIR}/temp/${SAMPLE}.scaled.bam > ${OUTDIR}/temp/${SAMPLE}.bedgraph;
        sed -e 's/^/chr/g;s/MT/M/g' ${OUTDIR}/temp/${SAMPLE}.bedgraph > ${OUTDIR}/temp/${SAMPLE}.modified.bedgraph;
        sort -k1,1 -k2,2n ${OUTDIR}/temp/${SAMPLE}.modified.bedgraph > ${OUTDIR}/temp/${SAMPLE}.sorted.bedgraph;
        bedGraphToBigWig ${OUTDIR}/temp/${SAMPLE}.sorted.bedgraph $CHROMLEN ${OUTDIR}/${SAMPLE}.bw"
        #rm ${OUTDIR}/temp/${SAMPLE}.*

    fi

    echo $command | qsub -V -cwd -o $OUTDIR -e $OUTDIR -l tmem=10G -l h_vmem=10G -l h_rt=3600 -N bigwig_${SAMPLE}

 done

 echo "Task completed: conversion jobs submitted to cluster"

我有两个问题:

  • 据我了解,bash 不太擅长算术运算:即进行涉及浮点数的任何类型的运算(加法、除法等)。但是,鉴于 var1 和 var2 在我的脚本中始终是整数(请参阅 $MIN 和所有 array1 值),我们是否同意这不是问题?即我的操作结果是浮点数,但它使用整数,所以这不是问题,对吗?

  • 在 StackExchange 中不是很清楚,因为这里没有突出显示语法,但我注意到我脚本的 var2=${BAMREADS[$i]} 部分不太正确。我在我的终端中使用 nano,而不是像其他变量(如 ${MIN})一样将所有的 ${BAMREADS[$i]} 都设为红色,而只有脚本的 ${BAMREADS[$i] 部分是以红色出现,即结尾]}不是红色。该脚本的行为似乎与我预期的一样,一切似乎都在工作。所以我不太明白为什么它不是全部都是红色的。

这就是我的脚本在 nano 中的样子(请注意 awk 命令中 ${BAMREADS[$i]} 中的 ]} 以及稍后在第二个 $command 中的 ]} 不是红色的,因为它应该是红色的):

在此处输入图像描述

但是,如果您将此代码粘贴到https://www.shellcheck.net/中,就脚本的这一部分的突出显示而言,您不会遇到任何问题。那么 nano 和 shellcheck 怎么没有告诉我同样的事情呢?我已经使用了这个脚本,它似乎对我有用,但我担心这个突出显示的问题..

谢谢

shell-script syntax
  • 1 个回答
  • 187 Views
Martin Hope
Jim Fischer
Asked: 2018-08-20 20:10:30 +0800 CST

包含双冒号 '::' 的 Bash 脚本函数名称

  • 20

我今天遇到了一个 Bash 脚本,其中包含带有双冒号::的函数名称,例如,file::write()和file::read()。我以前从未在 Bash 脚本中看到过这种语法,当我调用该脚本时,它运行得很好(令我惊讶)。

在我的系统(和在线)上搜索 Bash 的手册页后,我在文档中找不到任何支持此函数名称语法的内容。例如,该部分Shell Defined Functions将 shell 函数的语法定义为

function name [()] compound-command [redirection]

然后(在手册的其他地方)令牌name被定义为

name   A word consisting only of alphanumeric characters and
       underscores, and beginning with an alphabetic character
       or an underscore.  Also referred to as an identifier.

没有提到函数名称的双冒号语法。

到目前为止,我发现的对这种双冒号语法的唯一其他参考是在这个Shell 样式指南(参见小节Naming Conventions > Function Names)中,它建议对“包”中的函数名称使用双冒号语法——例如,mypackage::myfunction().

函数名称的这种双冒号语法是 Bash shell 的合法特性,还是可能是未记录的特性?如果它是合法的,那么它在 Bash 手册中的哪里记录?我看了又看,但在手册中找不到任何关于它的内容。我发现最接近的是::在PATH环境变量中使用将当前工作目录添加到搜索路径。

例子

#!/bin/bash
function abc::def() {
    echo "${FUNCNAME[0]}"
}
abc::def

我在三个不同的 Linux 发行版上测试了这个脚本,并且在所有三个上,脚本都打印abc::def到标准输出。

bash syntax
  • 1 个回答
  • 4813 Views
Martin Hope
Alexander Mills
Asked: 2018-05-28 19:54:21 +0800 CST

反引号与双引号

  • 9

这个问题想了好久,一直不知道怎么查

这是:

x=`command -v r2g`

与此相同:

x="$(command -v r2g)"

还是和这个一样:

x=$(command -v r2g)

...如果是后者,我应该这样做来解决它吗?

x="`command -v r2g`"
shell-script syntax
  • 4 个回答
  • 3395 Views
Martin Hope
user9303970
Asked: 2018-04-24 20:11:45 +0800 CST

lp -d lp1 -h myfile 有两个选项和一个参数还是 2 个选项和 2 个参数?

  • 0

在 O'reilly 的“Learning the Bash Shell”(第三版)中,它写在第 7 页:

lp -d lp1 -h myfile有两个选项和一个参数。

怎么来的?

我认为我认为有两个选项,每个选项都有一个参数:

-d lp1
-h myfile

笔记

lp打印文件(具体来说,通过打印机,而不是在终端上)。

command-line syntax
  • 1 个回答
  • 25 Views
Martin Hope
MrPickles
Asked: 2018-04-24 09:07:14 +0800 CST

lsof 输出中的星号 (*) 是什么意思?

  • 1

我将 TCP 服务器设置为 localhost 127.0.0.1,但没有看到输出127.0.0.1的主机部分lsof,而是看到了一个星号。

运行后lsof -i...

my_process 66666 root 5u IPv4 0xffff...c0 0t0 TCP *:5001 (LISTEN)

这个星号是什么意思?我的套接字是否绑定到本地主机,它没有地址或其他东西吗?

lsof syntax
  • 1 个回答
  • 870 Views
Martin Hope
AbstProcDo
Asked: 2018-04-04 19:31:38 +0800 CST

grep 命令中的 -e 选项

  • 0

grep我在阅读手册时遇到了一个问题-e,
它说:

-e pattern, --regexp=pattern
         Specify a pattern used during the search of the input: an input
         line is selected if it matches any of the specified patterns.
         This option is most useful when multiple -e options are used to
         specify multiple patterns, or when a pattern begins with a dash
         (`-').

我很困惑,e简称是什么?谷歌搜索不到答案。
此外,很容易理解

“当使用多个 -e 选项指定多个模式时,此选项最有用”

但是,这是什么意思?

“或者当模式以破折号 (`-') 开头时。”

你能举个例子吗?

grep syntax
  • 1 个回答
  • 1977 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve