标签: awk

为目录中的每个zip文件创建一个专用文件夹并解压缩zip文件

如果我选择一个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脚本更简单的方法?

linux shell awk sed unzip

48
推荐指数
4
解决办法
6万
查看次数

将系统命令的输出分配给变量

我想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.

awk pipe

47
推荐指数
5
解决办法
8万
查看次数

我们可以在awk中使用shell变量吗?

我们可以使用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_NEWSWATHI_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)

awk

47
推荐指数
4
解决办法
7万
查看次数

如何从Unix文件中删除空行

我需要从输入文件中删除所有空行并写入输出文件.这是我的数据如下.

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)

unix awk blank-line

46
推荐指数
6
解决办法
19万
查看次数

如何将变量从awk传递给shell命令?

我试图在awk中为文件的每一行运行一个shell命令,而shell命令需要一个输入参数.我试图使用system(),但它没有识别输入参数.

该文件的每一行都是一个文件的地址,我想运行一个命令来处理该文件.因此,对于一个简单的例子,我想对每一行使用'wc'命令并传递$1给wc.

awk '{system("wc $1")}' myfile
Run Code Online (Sandbox Code Playgroud)

shell awk parameter-passing

46
推荐指数
2
解决办法
9万
查看次数

将所有数字缩写转换为文本文件中的数值

我想将文本文件中的所有数字缩写(例如 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)

我的问题是,当发生变化时,我无法找到并替换所有可能的数字缩写。我想这样做直到至少有一位十进制缩写。

bash awk sed

46
推荐指数
9
解决办法
2506
查看次数

修复awk中字符串的前导和尾随空格

我正在尝试删除下面第二列中的前导和尾随空格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

不删除前导和尾随空格.

unix shell awk

45
推荐指数
5
解决办法
15万
查看次数

我可以使用awk将所有小写字母转换成大写字母吗?

我有一个混合了小写字母和大写字母的文件,我可以awk用来将该文件中的所有字母转换成大写字母吗?

linux bash awk

44
推荐指数
2
解决办法
7万
查看次数

如何使用Sed取消包含特定字符串的行?

文件中的行:

-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)

这不起作用.

bash awk sed

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

如何grep文件中的不区分大小写的字符串?

我有一个file1Success...OR 结尾 的文件success...

我希望以一种不区分大小写的方式grep来表达这个词success.

我写了以下命令,但它区分大小写

cat file1 | grep "success\.\.\."

我如何改变它以便它returns 0Success...OR success...

bash shell awk grep sed

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

标签 统计

awk ×10

bash ×4

sed ×4

shell ×4

linux ×2

unix ×2

blank-line ×1

grep ×1

parameter-passing ×1

pipe ×1

unzip ×1