awk:单字符串的多行输出,易于查找

时间:2010-09-06 16:48:30

标签: bash awk

<000> 000 000 000 000(4个字段,每个字段是由空格分隔的3个零组)

生成4个新行的过程

100 000 000

000 100 000 000

<000> 000 000 100 000

000 000 000 100

在ea线上,一组三个零被100替换

我该怎么做?

汤姆

1 个答案:

答案 0 :(得分:1)

$ echo '000 000 000 000' | awk '{for (i=1;i<=NF;i++) {f=$i; $i="100"; print; $i=f}}'
100 000 000 000
000 100 000 000
000 000 100 000
000 000 000 100

修改

使用for循环迭代字段。字段编号 $i 的每个字段(i)都会保存到临时变量f。然后替换该字段的内容。记录($0)已打印。该字段使用临时值返回其先前的值。

如果使用此数据,可能会更容易理解:001 002 003 004。然后输出看起来像:

100 002 003 004
001 100 003 004
001 002 100 004
001 002 003 100

这是使用sed的shell脚本版本:

data='001 002 003 004'    # or 000 000 000 000
for i in {1..4}; do echo "$data" | sed "s/\<[0-9]\{3\}\>/100/$i"; done

count=$(echo "data" | $wc -w)
for ((i=1;i<=count;i++)); do echo "$data" | sed "s/\<[0-9]\{3\}\>/100/$i"; done

或没有任何外部工具的Bash:

data=(001 002 003 004)    # use an array
count=${#data[@]}
for ((i=0;i<count;i++)); do f=${data[i]}; data[i]=100; echo "${data[@]}"; data[i]=$f; done

或许多其他可能性。