从"schemas.txt“文件中提取用户输入的第三个字段的位置。
schemas="schemas.txt"
for i in ${schemas[@]};
do
awk '{for(i=1;i<=NF;i++)if($i=="$3")print i}'
done
你知道为什么我被困在一个无限循环里吗?
编辑:在下面添加了一个示例。
在schemas.txt中,第二行是“人高体重年龄种族职业”。
假设用户输入"age“作为他们的第三个参数,我希望解析行并返回"4”,因为它是字符串中的第四个单词。
我正在尝试编写一个脚本,将一个非常大的文件分解成较小的片段,然后将这些片段发送到在后台运行的脚本。其动机是,如果脚本在后台运行,我就可以并行运行。
这是我的代码,./seq的工作方式和普通的seq命令一样( mac没有这个命令)。$1是要拆分的大文件。
echo "Splitting and Running Script"
for i in $(./seq 0 14000000 500000)
do
awk ' { if (NR>='$i' && NR<'$(($i+500000))') { print
我观察到一种我无法理解的行为,并希望有人能给我一些启发。
我有两个脚本,都是从STDIN读取的。
从键盘读取数字序列(1 enter 2 enter 3 enter ... )
脚本A每次都会打印"x“
#!/bin/bash
while read LINE
do
echo "x" # this happens everytime
echo $LINE # this is the only different line
done
output:
1
x
1
2
x
2
3
x
3
4
x
4
5
x
5
脚本B仅在第一次读取
我必须从一个包含特定字符串的文件(5MB)中进行grep,从一个大文件(27 to )中提取相同的字符串(和其他信息)。为了加快分析速度,我将27 1GB的文件拆分为1 1GB的文件,然后应用以下脚本(在这里的一些人的帮助下)。但是效率不是很高(生成一个180KB的文件需要30个小时!)。
这是脚本。有比grep更合适的工具吗?或者使用grep的更有效的方式?
#!/bin/bash
NR_CPUS=4
count=0
for z in `echo {a..z}` ;
do
for x in `echo {a..z}` ;
do
for y in `echo {a..z}` ;
我正在尝试修改一个bash脚本,以便从大量文件中删除一大堆恶意代码。
社区将从中受益,因此如下所示:
#!/bin/bash
grep -r -l 'var createDocumentFragm' /home/user/Desktop/infected_site/* > /home/user/Desktop/filelist.txt
for i in $(cat /home/user/Desktop/filelist.txt)
do
cp -f $i $i.bak
done
for i in $(cat /home/user/Desktop/filelist
看来,awk脚本将ARGV[1]到ARGV[ARGC]作为输入文件。
是否有办法使awk将ARGV视为简单参数而不是输入文件?
示例:
test.awk
#!/usr/bin/awk -f
BEGIN {title=ARGV[2]}
{if ($1=="AA") {print title}}
dat文件
AB
BA
AA
CC
$ test.awk dat 'My Interesting Title'
我感兴趣的标题awk: test.awk:3:致命:不能打开文件‘我感兴趣的标题’阅读(没有这样的文件或目录)
我试图编写一个简单的脚本,将用户指定的字段显示为bash参数。例如,我的文本文件如下所示:
1 2 3 4 5
1 2 3 4 5
a b c d e
例如,用户类型:
./script.sh text 1 2 5
其中$1 = text和其他参数(如$2 $3和$4)是字段,因此输出将如下所示:
1 2 5
1 2 5
a b e
我得到了这样的代码,它输出了定义为参数的所有列,但其中一列在其他列下面:
#!/bin/bash
text="$1"
shift
for x in $@; do
awk '{print $var}' var="$x
我正在尝试使awk文件成为可执行文件。我已经写好了脚本,也完成了chmod +x filename。代码如下:
#!/bin/awk -v
'TOPNUM = $1
## pick1 - pick one random number out of y
## main routine
BEGIN {
## set seed
srand ()
## get a random number
select = 1 +int(rand() * TOPNUM)
# print pick
print select
}'
当我尝试运行
我不太明白如何在.awk脚本中转义字符。
我想要读的文件中有这一行:
#Name Surname City Company State Probability Units Price Amount
如果我只写:
awk < test.txt '/\#/ {print $1}'
在命令行中,一切都很好,输出为#Name。
但是,如果我试图通过以下方式在.awk文件中执行相同的操作:
/\#/ {print $1};
我没有这方面的输出。此外,由于某些原因,gEdit不会将"\“识别为.awk中的转义字符。
为什么会发生这种情况?有解决办法吗?
我希望使用awk脚本根据另一个文件中的列列表从文件中选择列。例如:
$cat cols
3 2 6 4
$cat text
a b c d e f g
h i j k l m n
$awk_script cols text
c b f d
j i m k
因此,第三、第二、第六和第四列都是按照这个顺序选择的。
谢谢
我只想在awk中实现if条件。我创建了一个文件名:"simple_if“,如下所示。
BEGIN{
num=$1;
if (num%2==0)
printf "%d is Even number.\n",num;
else printf "%d is odd Number.\n",num
}
然后,我通过传递10作为$1的参数来执行程序,如下所示
awk -f simple_if 10
但是它不接受输入,而是显示0。输出:
0 is Even number.
如何在awk中从用户那里获得价值?
我在格式化这个bash脚本中的第一行时遇到了一些问题,这个脚本应该在文件中查找#Server行,然后在它下面的行上打印$newip。
理想情况下,我希望$newip看起来像这样:
route 74.125.141.102 255.255.255.255 net_gateway
但是当我试图运行脚本时,有些地方出了问题,因为我得到的只是:
awk: fatal: cannot open file `255.255.255.255' for reading (No such file or directory)
下面是我完整的bash脚本:
newip="route $(dig g
我正在尝试使用"Unix编程环境“这本书自学shell编程。我正在尝试编写一个脚本来从系统中删除所有信号量。然而,我找不到一种不使用临时文件的方法。下面是可以工作但使用临时文件的代码。我相信有一个更简单的解决方案。请帮帮忙。
# remsem: Remove all the semaphores
IFS='
'
set X`ipcs`
j=0
for i
do
case $i in
*semid*) j=1;;
*'Message Queues'*) break;;
esac