我有一个问题,因为我不熟悉 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 运行系统。
我正在寻找基于下一行的客场联系线。到目前为止,我看到的唯一方法是创建一个 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) #!/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)
到目前为止,我一直在寻找并没有找到失败的原因,任何想法我做错了什么?
抱歉,如果这是一个重复的问题,但我无法在此处或文档中找到我正在寻找的答案。
我有一个如下所示的文件:
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 效果很好,但在我的数据集中,情况并非总是如此。
我想基本上按第 …
我遇到了一个问题,我需要复制文件内容并删除几行,如果它们与上一个命令的输出匹配。但到目前为止,我在保持文件行完全相同方面遇到了问题。我把脚本的简单部分作为如果省略副本不是问题的一部分,因为这发生在未受影响的行中。
例如:
在原始文件中,我有以下内容
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)
我遇到的问题是,由于选项卡格式的字段,文件会变得不同。