小编mar*_*rkp的帖子

将行转换为一行

您能否帮助合并输入文件中的行并按降序生成如下输出。

输入文件.txt

TerminalA/admin#
   51% used 
TerminalB/admin#
   62% used
TerminalC/admin#
   42% used
Run Code Online (Sandbox Code Playgroud)

每个终端的输出文件应包含如下一行。

TerminalB/admin# 62% used
TerminalA/admin# 51% used
TerminalC/admin# 42% used
Run Code Online (Sandbox Code Playgroud)

下面是我尝试过的代码:

awk -f process1.awk | sort -t: -k1,2rn > output.txt
Run Code Online (Sandbox Code Playgroud)

其中 awk 脚本是:

$ cat process1.awk
/^$/  { print " " }
!/^$/ { printf("%s ",$0) }
Run Code Online (Sandbox Code Playgroud)

linux awk

6
推荐指数
2
解决办法
127
查看次数

如何编写 for 循环来合并 bash 中所有文件的第 n 列

在代码的第二行中,我尝试按*.out.tab列合并所有文件。代码的第三行提取第一列和每4 个后续列(第 4、8、12、16...),这意味着每个文件的每第四列。

如果没有 for 循环,就会像......

paste 1.out.tab 2.out.tab 3.out.tab 4.out.tab \
awk '{for(i=1;i<=NF;i+=4){printf "%s ",$i;} print ""}' | \
tail -n +5 > tmpfile
cat tmpfile | sed "s/^ENSG*//" >gene_count.txt
Run Code Online (Sandbox Code Playgroud)

但是,现在我想使用 for 循环来合并所有文件。

for f in `./alignments/repaired_reads/*ReadsPerGene.out.tab | sed 's/.ReadsPerGene.out.tab//'`;
paste "$f"\.out.tab | \
awk '{for(i=1;i<=NF;i+=4){printf "%s ",$i;} print ""}' | \
tail -n +5 > tmpfile
cat tmpfile | sed "s/^ENSG*://" > gene_count.txt
Run Code Online (Sandbox Code Playgroud)

输入示例:

head ./alignments/repaired_reads/SRR9200814ReadsPerGene.out.tab

N_unmapped  18517   18517   18517
N_multimapping  1620 …
Run Code Online (Sandbox Code Playgroud)

bash awk sed

5
推荐指数
1
解决办法
241
查看次数

删除第二列中数字为零的行

我有一个制表符分隔的文件,需要过滤零值的行。

$ head my_file.txt
id  SRR1385501
chr1:11672:+::chr1:12009:+  0 
chr1:14830:-::chr1:14969:-  8 
chr1:14830:-::chr1:15795:-  0 
chr1:15039:-::chr1:15795:-  2 
chr1:15948:-::chr1:16606:-  10
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用下面的命令(awk 版本:GNU 4.0.2,但它仍在删除标头)

$ awk '$2 !=0' my_file.txt
chr1:14830:-::chr1:14969:-  8 
chr1:15039:-::chr1:15795:-  2 
chr1:15948:-::chr1:16606:-  10
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

id  SRR1385501
chr1:14830:-::chr1:14969:-  8 
chr1:15039:-::chr1:15795:-  2 
chr1:15948:-::chr1:16606:-  10
Run Code Online (Sandbox Code Playgroud)

unix linux awk

5
推荐指数
1
解决办法
106
查看次数

如何从我的 bash 脚本创建日志文件

如何从 bash 脚本创建日志文件?

我留下的脚本没有选项,我想知道的是如何注册正在使用的脚本并创建一个单独的.log文件。

脚本:

#!/bin/bash
trash=~/TRASH
if [ ! -e $trash ]; then
  mkdir $trash
elif [ ! -d $trash ]; then
  echo "$0: error: $trash is not a directory"; exit 1
fi

while getopts "hr:t:s:u:" options; do
case $options in

#ALL THE OPTIONS AREN'T HERE FOR THE PURPOSE OF KEEPING IT SHORTER

shift $((OPTIND-1))

while [ $# -gt 0 ]; do
  if [ ! -e $1 ]; then
    echo "$0: error: tried to delete file that …
Run Code Online (Sandbox Code Playgroud)

bash shell tee io-redirection

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

将文本添加到 fasta 文件的标头

我有一个基因组的 fasta 文件(txt),类似于:

$ cat Strain-01.faa
>IMEHDJCA_03186 Serine/threonine-protein phosphatase 2
MEFKHRFIDGSRYQRIFVIGDIHGKLALLQDTLKRVDFHGERDLLISVGDLIDRGPDSVG
VLDYYQTHDWFEAVMGNHEWMMVNALDAQNKLERSEKEAYFIKIWHRNGCEWSQNL
>IMEHDJCA_03187 Serine transporter
MKESRETLNFSDTLPTETWTKHDTHWVLSLFGTAVGAGILFLPINLGIGGFWPLVLLALL
AFPMTFWGHRALARFVLSSKQADADFTDVVEEHFGAKAGRLISLLYFLSIFPILLIYGVG
>IMEHDJCA_03189 hypothetical protein
MNNQRHGITFGIERIGSQTILVFKATGTLTHQDYQAIAPVLEAALAGINRQQMNMLADIS
EFSGWEPRAAWDDFQLGLKIGFSVNKVAVYGDKNWQELAAKVGSWFISGEMKSFGD
Run Code Online (Sandbox Code Playgroud)

我想添加一个基于 file.txt 中的列表的额外 ID。

$ cat file.txt
ID      Gene        Strain-01       Strain-02       Strain-03
ID_01   pphB        IMEHDJCA_03186  DIBHEKPI_01648  LLMDBGDK_00598
ID_02   group_1001  IMEHDJCA_03187  DIBHEKPI_01635  LLMDBGDK_00611
ID_03   group_1002  IMEHDJCA_03189  DIBHEKPI_01628  LLMDBGDK_00616
Run Code Online (Sandbox Code Playgroud)

例如,对于 fastaStrain-01.faa文件,其IMEHDJCA_03186id 对应于Strain-01,因此我想将ID_01列 ID 的编号(来自file.txt)添加到序列的标题中,如下所示:

  • ID_01对应于IMEHDJCA_03186
  • ID_02对应于IMEHDJCA_03187
  • ID_03对应于IMEHDJCA_03189

结果会是这样的:

$cat Strain-01_edited.faa
>ID_01 IMEHDJCA_03186 Serine/threonine-protein phosphatase …
Run Code Online (Sandbox Code Playgroud)

bash awk r fasta str-replace

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

计算 Fasta 文件中每个物种的特定字符数

我一直在尝试在 fasta 文件中查找每个物种的 1 秒数量,如下所示:

>111
1100101010
>102
1110000001
Run Code Online (Sandbox Code Playgroud)

期望的输出是:

>111
5
>102
4
Run Code Online (Sandbox Code Playgroud)

我知道如何获取文件中 1 的数量:

grep -c 1 file
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法找到跟踪每个物种的 1 数量(而不是文件中的总数)的方法。

bash perl awk grep fasta

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

BASH - “exit 1”在另一个循环内的循环中失败

以下代码不会在第一次exit 1调用时退出error_exit。我缺少什么?

#!/bin/bash

THIS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
JINJANG_DIR="$(cd "$THIS_DIR/../.." && pwd)"
DATAS_DIR="$THIS_DIR/datas"

error_exit() {
    echo ""
    echo "ERROR - Following command opens the file that has raised an error."
    echo ""
    echo "  > open \"$1\""
    exit 1
}


cd "$DATAS_DIR"

find . -name 'datas.*'  -type f | sort  | while read -r datafile
do
    localdir="$(dirname $datafile)"
    
    echo "    * Testing ''$localdir''."
    
    filename=$(basename "$datafile")
    ext=${filename##*.}
    
    if [ "$ext" == "py" ]
    then
        unsafe="-u"
    else
        unsafe="" …
Run Code Online (Sandbox Code Playgroud)

bash

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

将第一个括号和第一个问号之间的行部分添加到行尾

我正在尝试在文件中从每行开头到行尾添加一个部分。目前,该文件的格式如下:

1.1) This is a sample question? Yes it is a sample question
1.2) Are you quite sure it is a sample question? I am quite sure
...
Run Code Online (Sandbox Code Playgroud)

我想做的是将每行开头的问题(但不是数字)添加到行尾,本质上是制作一个如下格式的文件:

1.1) This is a sample question? Yes it is a sample question This is a sample question
1.2) Are you quite sure it is a sample question? I am quite sure Are you quite sure it is a sample question
...
Run Code Online (Sandbox Code Playgroud)

我已经对原始文本文件进行了大量的重组,包括删除除相关问题末尾的问号之外的所有问号以及除每行编号末尾的所有右括号之外的所有问号。

我在这里的理由是使用右括号作为标记来指示要重复的部分的开始位置,并使用问号作为标记来显示要重复的部分的结束位置。然而,在实际尝试实现这一点时,我却一无所获。

我假设我需要使用一个for遍历每一行的循环,当它看到 a 时激活),并将此后的每个空格分隔字符添加到行尾,直到它看到 a …

bash awk for-loop sed

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

当做出无效选择时让菜单循环 BASH

嘿伙计们,所以我试图让这个菜单在 case 语句中做出无效选择时循环,但很难弄清楚我应该在 while 循环中回调什么,我尝试使用 * ,因为这就是中引用的内容case 作为无效选择,但当它看到它时它需要一个操作数,所以我不确定如何在下面调用它是代码,非常感谢任何帮助。

#Main menu.
#Displays a greeting and waits 8 seconds before clearing the screen

echo "Hello and welcome to the group 97 project we hope you enjoy using our program!"

sleep 8s
clear

while [[ $option -eq "*" ]]
do
    #Displays a list of options for the user to choose.

    echo "Please select one of the folowing options."
    echo -e "\t0. Exit program"
    echo -e "\t1. Find the even multiples of any number." …
Run Code Online (Sandbox Code Playgroud)

bash scripting menu case

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

当第一列相同时,如何按第二列中的最早日期对列表进行重新排序?

我有很多如下所示的列表,第一列是 ID 号,第二列是分数,第三列是 DDMMYYYY 格式的出生日期。

111 100 01012011
222 90 01012001
333 90 01012013
444 80 01012015
555 80 01012014
666 70 01012016
777 60 01012017
888 50 01012018
Run Code Online (Sandbox Code Playgroud)

当有多行具有相同分数时,我想将它们重新排序,并将最新日期放在顶部,示例的结果将是:

111 100 01012011
333 90 01012013
222 90 01012001
555 80 01012014
444 80 01012015
666 70 01012016
777 60 01012017
888 50 01012018
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,具有相同分数的行已重新排列,最新日期位于顶部。

我首先尝试选择最早的日期,我可以通过以下方式执行此操作:

 sort -k1.5 -k1.1,1.2 -k1.3,1.4 | tail -n 1
Run Code Online (Sandbox Code Playgroud)

但我不确定如何才能实现结果。我怎样才能达到结果?

sorting bash perl awk sed

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

如何将一个变量的 2 行添加到另一个变量的特定行?

我有这些输出的变量:

$nw_monitor
Host has 'em3, em2, em1, em4' network devices
em3 does not have any ip rules, skipping health checks
Checking health of 'em2'
Checking health of 'em1'
em4 does not have any ip rules, skipping health checks
Host has 2 healthy network links
Run Code Online (Sandbox Code Playgroud)

还有第二个变量。

$link
Speed              : 10 Gb/s
Link status        : yes
Speed              : 10 Gb/s
Link status        : yes
Run Code Online (Sandbox Code Playgroud)

从第二个变量中,它给出了 $nw_monitor、em2 和 em1 中提到的每个接口的速度和链接状态。

所以我想将它们混合起来,看起来像这样:

Host has 'em3, em2, em1, em4' network devices
em3 does not have …
Run Code Online (Sandbox Code Playgroud)

linux bash awk sed centos7

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

如何在Linux shell中以多种可能性获取最大值和最小值?

这个 shell 脚本为我提供了最大值和最小值,但我想在重复时获取这些值和相关的学生。

代码:

#!/bin/sh
Notamax=0
Notamin=0
alumneMax=''
alumneMin=''
while IFS=";" read alumne nota
do
    (( nota > Notamax )) && Notamax=$nota alumneMax=$alumne
    (( nota < Notamin || Notamin == 0)) && Notamin=$nota alumneMin=$alumne
done <notas.txt
echo "Nota maxima $Notamax ** Alumnos con nota maxima: $alumneMax"
echo "Nota minima $Notamin ** Alumnos con nota minima: $alumneMin"
Run Code Online (Sandbox Code Playgroud)

notas.txt

pepe;5
marcos;7
marta;70
luis;70
ana;5
Run Code Online (Sandbox Code Playgroud)

实际产量

Nota maxima 70 ** Alumnos con nota maxima: marta
Nota minima  5 ** Alumnos con nota minima: …
Run Code Online (Sandbox Code Playgroud)

linux bash awk

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

标签 统计

bash ×10

awk ×9

linux ×4

sed ×4

fasta ×2

perl ×2

case ×1

centos7 ×1

for-loop ×1

grep ×1

io-redirection ×1

menu ×1

r ×1

scripting ×1

shell ×1

sorting ×1

str-replace ×1

tee ×1

unix ×1