shell脚本中的Awk脚本
我编写了一些在{a..z}.txt文件上循环时要执行的awk脚本。我已经盯着这个代码看了30分钟了,但我就是找不到哪里出了问题。终端抱怨>,但我不认为这就是错误所在 基本上,我想做的是: 每行包含一个字符串和以下一组数字。我想重新打印数字,以便第一个数字是其中最小的一个 输入:a 1125159 255429047364290 47392510 48629708 68 60771 输出:a2901125159 2554 47364290 47392510 48629708 68 60771 有人能帮我找到下面的代码有什么问题吗shell脚本中的Awk脚本,shell,awk,Shell,Awk,我编写了一些在{a..z}.txt文件上循环时要执行的awk脚本。我已经盯着这个代码看了30分钟了,但我就是找不到哪里出了问题。终端抱怨>,但我不认为这就是错误所在 基本上,我想做的是: 每行包含一个字符串和以下一组数字。我想重新打印数字,以便第一个数字是其中最小的一个 输入:a 1125159 255429047364290 47392510 48629708 68 60771 输出:a2901125159 2554 47364290 47392510 48629708 68 60771 有人
for alphabet in {a..z}
do
awk -F$'\t' "NF>2{maxId=\$2;maxIndex=2;
for(i=2; i<=NF; i++){
if(maxId>\$i){maxId=\$i; maxIndex=i}
};
printf \"%s \t %s \t\",\$1, maxId;
for(i=2; i<=NF; i++){
if(i!=maxIndex)
printf \"%d \t\", \$i};
printf \"\n\";
}" $alphabet.merged > $alphabet.out
done
{a..z}中字母的
做
awk-F$'\t''NF>2{maxId=\$2;maxIndex=2;
对于(i=2;i\$i){maxId=\$i;maxIndex=i}
};
printf\%s\t%s\t\”,\$1,最大ID;
对于(i=2;i以下是脚本的编写方式:
awk 'BEGIN { FS=OFS="\t" }
NF>2 {
minIndex = 2
for (i=3; i<=NF; i++) {
if ( $minIndex > $i ) {
minIndex = i
}
}
printf "%s%s%s", $1, OFS, $minIndex
for (i=2; i<=NF; i++) {
if ( i != minIndex ) {
printf "%s%s", OFS, $i
}
}
print ""
}' file
a 68 2554 290 47364290 47392510 48629708 1125159 60771
awk'BEGIN{FS=OFS=“\t”}
NF>2{
minIndex=2
对于(i=3;i$i){
minIndex=i
}
}
打印文件“%s%s%s”$1,OFS$minIndex
对于(i=2;i2{
minIndex=2
对于(i=3;i$i){
minIndex=i
}
}
打印文件“%s%s%s”$1,OFS$minIndex>out
for(i=2;i=1)
}
}
打印“>
}“*”合并
既然您在awk脚本中没有使用任何环境变量,为什么不将整个内容单独引用,即,awk-F“\t”{…}'$alpha.merged>$alpha.out
?当然,还可以删除上的所有额外引用
和$
字符。祝你好运。@Sheller,但我仍然需要转义awk变量,如$1、$2…,对吗?不,你不需要转义I
或$I
(取决于你的需要)。此外,简化调试,只需尝试awk'…'a.merged>a.out
即可工作(注释掉循环,直到你让awk代码在alpha中至少运行1个字母)。祝你好运。@Sheller感谢它运行!!!!@EdMorton Ed,我实际上在stackoverflow上发布了一个类似的问题,并遵循了给出的建议。()但我会看看那本书,谢谢!
awk 'BEGIN { FS=OFS="\t" }
FNR==1 { close(out); out=FILENAME; sub(/merged/,"out",out) }
NF>2 {
minIndex = 2
for (i=3; i<=NF; i++) {
if ( $minIndex > $i ) {
minIndex = i
}
}
printf "%s%s%s", $1, OFS, $minIndex > out
for (i=2; i<=NF; i++) {
if ( i != minIndex ) {
printf "%s%s", OFS, $i > out
}
}
print "" > out
}' *.merged