如果我选择一个zip文件并右键单击"在此处提取",则会创建一个包含zip文件名的文件夹,并将zip文件的整个内容提取到其中.
但是,我想通过shell转换几个zip文件.但是,当我这样做
unzip filename.zip
Run Code Online (Sandbox Code Playgroud)
该文件夹"filename"未创建,但所有文件都被解压缩到当前目录中.
我查看了参数,但没有这样的参数.我也试过了
for zipfile in \*.zip; do mkdir $zipfile; unzip $zipfile -d $zipfile/; done
Run Code Online (Sandbox Code Playgroud)
但.zip必须使用sed删除2. $ zipfile和4. $ zipfile 的扩展名.如果我做
for zipfile in \*.zip; do mkdir sed 's/\.zip//i' $zipfile; unzip $zipfile -d sed 's/\.zip//i' $zipfile/; done
Run Code Online (Sandbox Code Playgroud)
它不起作用.
如何正确更换.zip扩展名$zipfile?
有没有比shell脚本更简单的方法?
我想system在awk脚本中运行该命令并将其输出存储在变量中.我一直试图这样做,但命令的输出总是进入shell而我无法捕获它.关于如何做到这一点的任何想法?
例:
$ date | awk --field-separator=! {$1 = system("strip $1"); /*more processing*/}
Run Code Online (Sandbox Code Playgroud)
应该调用strip系统命令而不是将输出发送到shell,应该将输出分配回来$1进行更多处理.现在是Rignt,它将输出发送到shell并将命令的retcode分配给$1.
我们可以使用shell变量AWK像$VAR代替$1,$2?例如:
UL=(AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW)
NUSR=`echo ${UL[*]}|awk -F, '{print NF}'`
echo $NUSR
echo ${UL[*]}|awk -F, '{print $NUSR}'
Run Code Online (Sandbox Code Playgroud)
实际上我是一个oracle DBA,我们得到了很多导入请求.我正在尝试使用脚本自动化它.该脚本将查找转储中的用户并提示需要加载转储的用户.
假设转储有两个用户AKHIL,SWATHI(有可在转储可能的用户,我希望进口更多的用户数).我想将转储导入新用户AKHIL_NEW和SWATHI_NEW.所以要阅读的输入有些想法AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW.
首先,我需要找到要创建的用户数,然后我需要AKHIL_NEW,SWATHI_NEW从我们给出的输入中获得新用户.这样我就可以连接到数据库并创建新用户然后导入.我没有复制整个代码:我只是从接受输入用户的地方复制了代码.
UL=(AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW) ## it can be many users like USER1:USER1_NEW,USER2_USER2_NEW,USER3:USER_NEW..
NUSR=`echo ${UL[*]}|awk -F, '{print NF}'` #finding number of fields or users
y=1
while [ $y -le $NUSR ] ; do
USER=`echo ${UL[*]}|awk -F, -v NUSR=$y '{print $NUSR}' |awk -F: '{print $2}'` #getting Users to created …Run Code Online (Sandbox Code Playgroud) 我需要从输入文件中删除所有空行并写入输出文件.这是我的数据如下.
11216,33,1032747,64310,1,0,0,1.878,0,0,0,1,1,1.087,5,1,1,18-JAN-13,000603221321
11216,33,1033196,31300,1,0,0,1.5391,0,0,0,1,1,1.054,5,1,1,18-JAN-13,059762153003
11216,33,1033246,31300,1,0,0,1.5391,0,0,0,1,1,1.054,5,1,1,18-JAN-13,000603211032
11216,33,1033280,31118,1,0,0,1.5513,0,0,0,1,1,1.115,5,1,1,18-JAN-13,055111034001
11216,33,1033287,31118,1,0,0,1.5513,0,0,0,1,1,1.115,5,1,1,18-JAN-13,000378689701
11216,33,1033358,31118,1,0,0,1.5513,0,0,0,1,1,1.115,5,1,1,18-JAN-13,000093737301
11216,33,1035476,37340,1,0,0,1.7046,0,0,0,1,1,1.123,5,1,1,18-JAN-13,045802041926
11216,33,1035476,37340,1,0,0,1.7046,0,0,0,1,1,1.123,5,1,1,18-JAN-13,045802041954
11216,33,1035476,37340,1,0,0,1.7046,0,0,0,1,1,1.123,5,1,1,18-JAN-13,045802049326
11216,33,1035476,37340,1,0,0,1.7046,0,0,0,1,1,1.123,5,1,1,18-JAN-13,045802049383
11216,33,1036985,15151,1,0,0,1.4436,0,0,0,1,1,1.065,5,1,1,18-JAN-13,000093415580
11216,33,1037003,15151,1,0,0,1.4436,0,0,0,1,1,1.065,5,1,1,18-JAN-13,000781202001
11216,33,1037003,15151,1,0,0,1.4436,0,0,0,1,1,1.065,5,1,1,18-JAN-13,000781261305
11216,33,1037003,15151,1,0,0,1.4436,0,0,0,1,1,1.065,5,1,1,18-JAN-13,000781603955
11216,33,1037003,15151,1,0,0,1.4436,0,0,0,1,1,1.065,5,1,1,18-JAN-13,000781615746
Run Code Online (Sandbox Code Playgroud) 我试图在awk中为文件的每一行运行一个shell命令,而shell命令需要一个输入参数.我试图使用system(),但它没有识别输入参数.
该文件的每一行都是一个文件的地址,我想运行一个命令来处理该文件.因此,对于一个简单的例子,我想对每一行使用'wc'命令并传递$1给wc.
awk '{system("wc $1")}' myfile
Run Code Online (Sandbox Code Playgroud) 我想将文本文件中的所有数字缩写(例如 1K、100K、1M 等)转换为纯数值,例如 1000、100000、1000000 等。
例如,如果我有以下文本文件:
1.3K apples
87.9K oranges
156K mangos
541.7K carrots
1.8M potatoes
Run Code Online (Sandbox Code Playgroud)
我想在 bash 中将其转换为以下内容:
1300 apples
87900 oranges
156000 mangos
541700 carrots
1800000 potatoes
Run Code Online (Sandbox Code Playgroud)
我使用的命令是用完整的数值替换匹配的数字缩写字符串,如下所示:
sed -e 's/1K/1000/g' -e 's/1M/1000000/g' text-file.txt
Run Code Online (Sandbox Code Playgroud)
我的问题是,当发生变化时,我无法找到并替换所有可能的数字缩写。我想这样做直到至少有一位十进制缩写。
我正在尝试删除下面第二列中的前导和尾随空格input.txt:
Name, Order
Trim, working
cat,cat1
我已使用下面的内容awk删除第二列中的前导和尾随空格但它不起作用.我错过了什么?
awk -F, '{$2=$2};1' input.txt
Run Code Online (Sandbox Code Playgroud)
这使输出为:
Name, Order
Trim, working
cat,cat1
不删除前导和尾随空格.
我有一个混合了小写字母和大写字母的文件,我可以awk用来将该文件中的所有字母转换成大写字母吗?
文件中的行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2001 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2002 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
注释掉让我们说包含的行
2001
Run Code Online (Sandbox Code Playgroud)
我可以简单地运行这个SED命令:
sed -i '/ 2001 /s/^/#/' file
Run Code Online (Sandbox Code Playgroud)
但现在我该怎么回复?
在取消注释同一行?
我试过了
sed -i '/ 2001 /s/^//' file
Run Code Online (Sandbox Code Playgroud)
这不起作用.
我有一个file1以Success...OR
结尾
的文件success...
我希望以一种不区分大小写的方式grep来表达这个词success.
我写了以下命令,但它区分大小写
cat file1 | grep "success\.\.\."
我如何改变它以便它returns 0与Success...OR
success...