我是unix的新手.我在使用unix查看大日志文件时遇到问题vi.你能否建议在unix上快速查看大文件的最佳工具?另外,你能发布自己在unix上查看大文件的方法吗?
我有两个像这样的领域
Field1:Field2 - 我把它们存储在这样的文件中:
X : 1234
X : 4321
Y : 123
Z : 1234
Z : 4321
Z : 357
Run Code Online (Sandbox Code Playgroud)
我想把它变成这个:
X : 1234
4321
Y : 123
Z : 1234
4321
357
Run Code Online (Sandbox Code Playgroud)
对于给定的field1,field2将是不同的,即X不能具有1234并且再次具有1234但是两个不同的field1可以具有相同的field2,如X和Z具有1234和4321.
如何使用BASH/KSH过滤输入文件以获取所需的输出文件?
我在服务器A中有一个KornShell(ksh)脚本,它将在ServerB中运行一个脚本.
#!/bin/ksh/
ssh user@server "/path/script.sh"
Run Code Online (Sandbox Code Playgroud)
脚本权限如下:
-rwxrwxrwx 1 user dba 75 Jun 11 10:00 script.sh
Run Code Online (Sandbox Code Playgroud)
我检查了/ bin中是否存在'ksh'.(bash不是)
当我尝试运行脚本时,我得到了
./script.sh: cannot execute
可能会发生什么?我手动测试了ssh命令,它可以工作.
它是一个SunOS系统.
我编写了一个shell脚本,在运行bash shell的服务器上进行数据操作.
我的脚本有一个函数可以检索ZIP文件中的数据
function getCTLfile() {
for i in ${Array[@]}; do
if [[ `echo ${i}|awk -F . '{print $NF}'` == "ctl" ]]; then
echo "${i}"
fi
done
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好但是这台机器硬件有问题所以我们的系统管理员要求我将我的代码移植到运行Korn shell的另一台服务器上.
当我运行我的脚本时,它在我的功能上失败了!! 即使我从命令行输入它.
$ function getCTLfile() {
-ksh: syntax error: `(' unexpected
Run Code Online (Sandbox Code Playgroud)
我需要在任何地方更改语法吗?我做了一些研究,似乎一切都应该有效.
这是我的输入文件
^A{1:IRVTUS30XXX}{2:I300dfaffaefa}{3:fewfa]}
:15A:
:20:1234556
:22:dsafas
dsafafaf
erwfafgr
:23:fewfd
:24:firh
:60:uncenjnjcdv
:72:uenuernfk
12345
-}^C^A{1:IRVTUS30XXX}{2:I304dfaffaefa}{3:fewfa]}
:15A:
:20:1234556
:22:dsafas
dsafafaf
erwfafgr
:23:fewfd
:24:firh
:60:uncenjnjcdv
:72:uenuernfk
12345
-}^C^A{1:IRVTUS30XXX}{2:I306dfaffaefa}{3:fewfa]}
:15A:
:20:1234556
:22:dsafas
dsafafaf
erwfafgr
:23:fewfd
:24:firh
:60:uncenjnjcdv
:72:uenuernfk
12345
-}^C
Run Code Online (Sandbox Code Playgroud)
在这里,我想用以下命令删除几行.如果传入消息是类型300(取决于第一行中的此标记2:I300),我需要仅对^ A和^ C之间的消息执行第一个命令,其中模式I305应该在那里.Sameway for I304我想执行第二个命令而对于I306我应该执行第三个命令.
1) perl -i -pe 's/:20:(.*)\r\n//g' (for Type 300)
2) perl -i -pe 's/:22:(.*)\r\n//g' (for Type 305)
3) perl -i -pe 's/:(15A|15B):(.*)\r\n//g' (for Type 306)
Run Code Online (Sandbox Code Playgroud)
不知何故,我需要通过消息读取文件,即以^ A开头,以^ C结尾
请注意,我需要使用perl命令进行inplace替换,而不是创建任何临时文件,因为我想在文件中保留很少的特殊字符.
甲KornShell(KSH)脚本(scriptC.ksh)由间接调用scriptA.ksh(scriptA.ksh调用scriptB.ksh它调用scriptC.ksh).
scriptC.ksh:
kill -PIPE ${PPID}
Run Code Online (Sandbox Code Playgroud)
什么是-PIPE标志在这里做?如果-管标志在使用scriptC.ksh那么这样的输出:
scriptA输出:
@:/tmp #ksh sciprtA.ksh
sciprtA.ksh[100]: 343434 Terminated
Terminated
Run Code Online (Sandbox Code Playgroud)
如果-PIPE删除,那么这是scriptC.ksh出口的终端输出:
scriptC.ksh:
kill ${PPID}
Run Code Online (Sandbox Code Playgroud)
scriptA输出:
@:/tmp #ksh sciprtA.ksh
Terminated
Run Code Online (Sandbox Code Playgroud)
对此有何见解?
如何仅在特定条件下读取用户输入.以下代码在ksh中不起作用:
if [[ $contract = "$fld1" ]];then
read position?"Enter the position of Contract number in m-n format,m should be less than n "
fi
Run Code Online (Sandbox Code Playgroud)
在上述条件下代码不等待用户提示
我正在尝试在函数内打印一个值.但它不起作用; 它正在打印变量名称.这是我的代码:
#!/bin/ksh
MyVariable=""
function ValidateVariableValue
{
eval $1="Working!"
echo "$1" #Here is printing the value "MyVariable" instead of "Working!"
}
ValidateVariableValue MyVariable
echo "value is: ${MyVariable}" #Here is printing the correct value that is "Working!"
Run Code Online (Sandbox Code Playgroud)
你知道怎么打印函数里面的值吗?
我需要运行一个名为pg.sh的程序.它报告stdout输出日志.如何将stdout以及stderr和stdout保存到2个单独的日志文件中?
我搜索并得到以下代码
(pg.sh 2>&1 1>&3 ) 3>&1 1>&2 | tee output.log) > final.log 2>&1
Run Code Online (Sandbox Code Playgroud)
我理解1和2是指向stdout和stderr的文件描述符.3是另一个指向stdout的文件描述符.
上面的代码工作正常,但我不明白这是如何实现的.有人可以帮我写代码吗?
我在下面有一些示例代码,我使用tar/dd将文件备份到磁带...
time tar -cvf - \
/home/user1 \
/home/user2 | dd bs=128k of=/dev/rmt0 2>&1 | tee -a debug.log
mail -s "testing" admin@domain.com < debug.log
Run Code Online (Sandbox Code Playgroud)
问题是当我运行这个时,以下内容被打印到屏幕上...
a /home/user1/fileA 10 blocks.
a /home/user2/fileB 1 blocks.
0+1 records in.
0+1 records out.
real 0m2.253s
user 0m0.003s
sys 0m0.002s
Run Code Online (Sandbox Code Playgroud)
但只有以下内容被重定向到日志文件...
cat debug.log
0+1 records in.
0+1 records out.
Run Code Online (Sandbox Code Playgroud)
有没有办法将所有输出重定向到日志?
我尝试在tar/dd管道之间添加tee命令,但是没有用.
这是在运行IBM AIX的系统上,因此我无法访问许多GNU工具.