小编Bit*_*Nix的帖子

根据上一行更新行

我有一个问题,因为我不熟悉 awk。我将 sar -d 输出生成的 csv 文件转换为 csv 样式:

12:33:41        unix,restarts
12:35:00,lofi4096,0,0.0,0,0,0.0,0.0
,iscsi0,0,0.0,0,0,0.0,0.0
,scsi_vhc,0,0.0,0,0,0.0,0.0
,nfs1,0,0.0,0,0,0.0,0.0

12:45:00,lofi4096,0,0.0,0,0,0.0,0.0
,iscsi0,0,0.0,0,0,0.0,0.0
,scsi_vhc,0,0.0,0,0,0.0,0.0
,nfs1,0,0.0,0,0,0.0,0.0
Run Code Online (Sandbox Code Playgroud)

我想转换成这个

12:33:41        unix,restarts
12:35:00,lofi4096,0,0.0,0,0,0.0,0.0
12:35:00,iscsi0,0,0.0,0,0,0.0,0.0
12:35:00,scsi_vhc,0,0.0,0,0,0.0,0.0
12:35:00,nfs1,0,0.0,0,0,0.0,0.0

12:45:00,lofi4096,0,0.0,0,0,0.0,0.0
12:45:00,iscsi0,0,0.0,0,0,0.0,0.0
12:45:00,scsi_vhc,0,0.0,0,0,0.0,0.0
12:45:00,nfs1,0,0.0,0,0,0.0,0.0
Run Code Online (Sandbox Code Playgroud)

我的尝试,但由于 awk 逐行读取,我不知道要保留上一行的值。我希望我所拥有的应该工作。知道如何获得我想要的结果。我尝试过 awk,但我想这应该可以使用 sed 或使用自定义 shell 脚本的困难方式(我试图避免做这部分)。

#!/usr/bin/awk -f
BEGIN {
        FS=",";
}
{
        print $1
        if ($1 != "") {
                mydate=$1;
                print $0;
        }
        else {
                print $mydate","$0;
        }
}
Run Code Online (Sandbox Code Playgroud)

使用 Solaris 11.1 运行系统。

solaris awk csv

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

根据下一行的第一个字符连接行

我正在寻找基于下一行的客场联系线。到目前为止,我看到的唯一方法是创建一个 shell 脚本,该脚本将逐行读取并按照以下方式执行某些操作:

while read line
    if $line does not start with "," and $curr_line is empty 
        store line in curr_line
    if $line does not start with "," and $curr_line is not empty
        flush $curr_line to file
        store $line in $curr_line
    if $line starts with "," append to $curr_file, flush to file empty curr_line
done < file
Run Code Online (Sandbox Code Playgroud)

所以我试图了解是否可以通过 sed 甚至 grep 重定向来实现。文件的规则很简单。最多只有一行以“,”开头,需要附加到前一行。

前任:

line0
line1
line2
,line3
line4
line5
,line6
line7
,line8
line9
line10
line11
Run Code Online (Sandbox Code Playgroud)

结果文件将是

line0
line1
line2,line3
line4 …
Run Code Online (Sandbox Code Playgroud)

sed awk perl text-processing

6
推荐指数
3
解决办法
3421
查看次数

bourne shell if [ -e $directory/file.$suffix ]

#!/bin/sh
CONFIG_DIR="/var/opt/SUNWldm/"
read option
if [ $option -eq 9 ]; then
        ret=1
elif [ -e ${CONFIG_DIR}file.xml.${option} ]; then
        echo "TRUE"
fi
Run Code Online (Sandbox Code Playgroud)

我在 while 循环中有上面的代码来显示选项列表。不幸的是,我在elfi声明中遇到了问题。

From: IF for Beginners如果文件存在, -e 返回真。

我已经仔细检查了语法,甚至在调试模式下运行脚本(我放在set -x这个脚本的开头,可以看到中的替换if正确完成,如内联所示:

+ [ 201301271355 -eq 9 ]
+ [ -e /var/opt/SUNWldm/file.xml.201301271355 ]
./ldm_recover.sh: test: argument expected
Run Code Online (Sandbox Code Playgroud)

到目前为止,我一直在寻找并没有找到失败的原因,任何想法我做错了什么?

shell solaris test bourne-shell

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

按字母顺序对 Unix 进行排序,然后按数字排序,没有按我的预期工作

抱歉,如果这是一个重复的问题,但我无法在此处或文档中找到我正在寻找的答案。

我有一个如下所示的文件:

chr2_oligo1234  700 750
chr2_oligo1236  750 800
chr1_oligo1 50  100
chr1_oligo256   150 200
chr1_oligo6 3500    3550
chr4_oligo95    50  100
chr5_oligo1 50  100
chr4_oligo4 150 200
Run Code Online (Sandbox Code Playgroud)

所需的输出如下所示:

chr1_oligo1 50  100
chr1_oligo256   150 200
chr1_oligo6 3500    3550
chr2_oligo1234  700 750
chr2_oligo1236  750 800
chr4_oligo95    50  100
chr4_oligo4 150 200
chr5_oligo1 50  100
Run Code Online (Sandbox Code Playgroud)

开头的模式(例如 chr#_oligo#)仅与 chr# 相关,这意味着所有 chr1 应该是第一个,然后是 chr2,然后是 chr3 等,但我想按组对这些子字符串进行数字排序如上面所需的输出所示。所以,我想知道如何在第一列的情况下按字母顺序排序,然后保持该顺序(chr1->chrN),按数字对每个数据块进行排序。

如果我的措辞不适合这个问题或者重复,我深表歉意。试

sort -k1,1 -nk2
Run Code Online (Sandbox Code Playgroud)

确实按数字正确排序,但没有保持第一个排序完整(将第一列打乱,并将所有行与第 2 列和第 3 列放在一起,如下所示:

50   100
Run Code Online (Sandbox Code Playgroud)

我使用的是 Mac OS X。

编辑:我想更改第一列中的一些示例以显示更多我正在寻找的内容。如果第一列中的名称按数字顺序排列,则 gsort -V 效果很好,但在我的数据集中,情况并非总是如此。

我想基本上按第 …

text-processing sort

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

读取文件并复制到另一个文件

我遇到了一个问题,我需要复制文件内容并删除几行,如果它们与上一个命令的输出匹配。但到目前为止,我在保持文件行完全相同方面遇到了问题。我把脚本的简单部分作为如果省略副本不是问题的一部分,因为这发生在未受影响的行中。

例如:

在原始文件中,我有以下内容

Testing,      resuming text
Run Code Online (Sandbox Code Playgroud)

运行脚本时,字段变为:

Testing, resuming text
Run Code Online (Sandbox Code Playgroud)

我正在做以下事情:

#!/usr/bin/bash
rm /tmp/dest_file
while read line
do
   echo $line >> /tmp/dest_file
done < $1
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,由于选项卡格式的字段,文件会变得不同。

bash solaris quoting

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

标签 统计

solaris ×3

awk ×2

text-processing ×2

bash ×1

bourne-shell ×1

csv ×1

perl ×1

quoting ×1

sed ×1

shell ×1

sort ×1

test ×1