我需要将 tar 文件中的单个文件提取到另一个目录。
到目前为止我有这个:
此操作将单个文件提取到同一目录:
tar -xvf filename.tar ./file.txt
Run Code Online (Sandbox Code Playgroud)
我试过了,但没用
tar -xvf filename.tar /home/dir ./file.txt
Run Code Online (Sandbox Code Playgroud)
或这个:
tar -xvf filename.tar -C /home/dir ./file.txt
Run Code Online (Sandbox Code Playgroud) 我正在使用 HP-UX 操作系统,并且想要使用之前输入的命令,就像我在 Linux Ctrl+中使用的那样r,以便在 HP-UX 命令行中轻松访问。
输入.txt:
john_Apple01_xyz_1
john_Fruit_Apple01_abc_c1
john_Apple21_trs_1
john_Fruit_Apple21_efg_1
john_Fruit_Apple21_tefg_1
Run Code Online (Sandbox Code Playgroud)
期望的输出:
Apple01_xyz_1
Apple01_abc_c1
Apple21_trs_1
Apple21_efg_1
Apple21_tefg_1
Run Code Online (Sandbox Code Playgroud)
每次在行中找到苹果时,如何使用 nawk 或 sed 来剪切前导部分?
我在 Solaris 10 中使用 KSH。
我必须解析ls -Al输出并获取文件或目录名称
ls -Al 输出 :
drwxr-xr-x 12 s162103 studs 12 march 28 2012 personal domain
drwxr-xr-x 2 s162103 studs 3 march 28 22:32 public_html
drwxr-xr-x 7 s162103 studs 8 march 28 13:59 WebApplication1
Run Code Online (Sandbox Code Playgroud)
我应该只使用 ls -Al | <something>
例如:
ls -Al | awk '{print $8}'
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为$8如果目录名称中有空格,则不是名称,它是名称的一部分。也许有一些实用程序可以删除姓氏或删除以前的任何内容?
这是我的脚本:
#!/bin/ksh
#this is where I want to go again if user enter
#an answer other than "yes or no"
echo "yes or no?"
read ans
case $ans in
[yY]*)
echo "yes"
;;
[nN]*)
echo "no"
;;
*)
echo "yes or no only"
# here, if the answer is not "Y" or "N",
# I want to go back to asking "yes or no?"
;;
esac
Run Code Online (Sandbox Code Playgroud)
谁能给我一个提示?
我有一系列存储在其中的模式foo.txt,我想遍历这些模式并查看 file 中的哪些匹配行bar.txt。
while read PWW
do
cat user/dump/bar.txt | awk '/${PWW}/{print $2}' >> user/dump/out.txt
done < user/dump/foo.txt
Run Code Online (Sandbox Code Playgroud)
foo.txt:
2100001b32
2100001b38
3100001b35
4100001b28
5100001b46
6100001b56
Run Code Online (Sandbox Code Playgroud)
bar.txt:
2100001b32 good
2100001b38 bad
3100001b35 okay
4100001b28 large
5100001b46 good
6100001b56 bad
Run Code Online (Sandbox Code Playgroud)
想要的out.txt:
good
bad
okay
large
good
bad
Run Code Online (Sandbox Code Playgroud)
我无法搜索foo.txt. while 循环运行并给我空输出。我想awk是${PWW}从foo.txt.
我怎样才能让它工作?我的环境是 Solaris 5.10,使用 Korn shell,基本awk
(旧awk)。
由于这两个ksh和bash是基于sh很多的Korn Shell脚本(KSH)将简称为伯恩-再次Shell脚本(bash)的一次家当和文件扩展名被改变运行,
而你调用$ bash script.bash而不是$ ksh script.ksh.
我有一个基本脚本来替换名为“files”的目录中出现的任何 ksh 并更改脚本的文件扩展名。
#!/bin/bash/
#replace instances
find ./files -type f - exec sed -i.bak "s/ksh/bash/g" {} \;
#Change extensions
for f in ./files/*.ksh;
do mv "$f" "./files/""$(basename "$f" .ksh).bash"
done
#Clean up
rm ./files/*.bak
Run Code Online (Sandbox Code Playgroud)
该脚本可以工作并执行上述操作,但是是否足以将任何 ksh 脚本转换为 bash,或者是否存在我未考虑的条件?
下面是我的脚本,它有很多性能问题
#!/usr/bin/ksh
while read i
do
x=`echo $i |cut -d"|" -f2`
rem=`expr $x % 62`
echo "reminder is " $rem
quo=`expr $x / 62`
echo "quotiont is " $quo
grp_rem=" "
if [[ ${#quo} -ge 2 ]]
then
while [ $quo -ge 62 ]
do
sub_rem=`expr $quo % 62`
quo=`expr $quo / 62`
grp_rem=`echo $sub_rem" "$grp_rem`
done
fi
echo $i"|"$quo" "$grp_rem" "$rem >> base62_while.out
done < base62_while.txt
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以使用上述脚本提高性能吗?
样本输入:
1|5147634738948389685
Run Code Online (Sandbox Code Playgroud)
样本输出
1|5147634738948389685|6 8 16 13 46 17 20 35 9 …Run Code Online (Sandbox Code Playgroud) 请注意,我ksh在 CentOS 中使用和运行。
我有一个 shell 脚本,其中记录器功能设置为:
if tty -s
then
echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
echo "${FOO}" >> ${BAR_LOG_FILE}
fi
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我将它重构if为看起来像if我代码中的所有其他测试时,它停止运行。
为什么?
我的重构如下:
if [ tty -s ];
then
echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
echo "${FOO}" >> ${BAR_LOG_FILE}
fi
Run Code Online (Sandbox Code Playgroud)
我唯一的改变是在 周围加上括号if并添加一个;,就像我的其余if测试一样,它们都按预期工作。
我的重构导致了一个错误,看起来像BAR_LOG_FILE无法找到。
这里发生了什么?
我的 shell 脚本中有以下循环。它的作用是删除了超过 3000 个字节的记录,实际上它在读取和逐行检查字节时需要更长的时间,如果少于 3000 个字节,则创建一个文件。
if [ $FILE_NM = "HUN" ]
then
HUN_FILENM=` ls HUN*.txt | tail -1 `
while read line
do
bytes=` echo $line | wc -c `
if (( $bytes <= 3000 )); then
echo "$line" >> output290_donot_delete.txt
fi
done < $HUN_FILENM
mv output290_donot_delete.txt $HUN_FILENM
fi
Run Code Online (Sandbox Code Playgroud)
Unix 中是否有任何命令读取文件,如果少于 3000 字节,然后创建文件。我需要避免循环
输入按以下格式提供:
ksh -x count.sh filename `cat filepath/filename | wc -l
Run Code Online (Sandbox Code Playgroud)
这里的问题是我需要将第二个参数 cat 传递给另一个变量并执行expr -1.
我的要求是我需要计算命令本身的计数,并将其传递给脚本。
对于实际计数,记录总数应小于 1。我还需要删除标题记录。
我们有数百个 shell 脚本在 Solaris 11.3 服务器上运行。系统外壳是ksh93
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 13 Apr 12 2018 /bin/sh -> sparcv9/ksh93
Run Code Online (Sandbox Code Playgroud)
所有脚本#!/bin/ksh的顶部都有she-bang 。
服务器正在迁移到在 x86/64 上运行的 Red Hat Enterprise Linux,我知道系统 shell 是 bash,默认情况下未在 RHEL 上配置 ksh93。
我假设可以在 RHEL 上安装和配置 ksh93 来帮助解决这个问题?
一些脚本使用 ksh 特定的语法。
有没有人有这个过程的经验?
输入示例:
apple_ig
rabbit_cat_ig
dog_ig
bird_duck_ig
orange_ig
goat_ig
Run Code Online (Sandbox Code Playgroud)
预期输出:
apple_ig
dog_ig
orange_ig
goat_ig
Run Code Online (Sandbox Code Playgroud)
我需要忽略整个字符串中多次包含下划线 _ 的所有数据。
bash、ksh、sed、grep、awk