3

所以,目前我已经创建了一个代码来执行此操作,如下所示。在我回显变量后,此代码可以正常工作并执行它应该做的事情:

a=`awk 'NR==2 {print $1}' $coor`

b=`awk 'NR==3 {print $2}' $coor`

c=`awK 'NR==4 {print $3}' $coor`

....但我必须为更多行执行此操作,并且我想要更一般的表达。所以我试图创建一个如下所示的循环。语法方面我认为代码没有任何问题,但它没有向文件“Cmain”输出任何内容。

我想知道是否有人可以帮助我,我在脚本方面有点新。

如果有帮助,我也可以发布我正在尝试阅读的内容。

for (( i=1; i <= 4 ; i++ )); do
  for (( j=0; j <= 3 ; j++ )); do
    B="`grep -n "cell" "$coor" | awk 'NR=="$i" {print $j}'`"
  done
done

echo "$B" >> Cmain
4

3 回答 3

4

你可以用这个替换你的行awk

awk '{ for (i=1; i<=NF; i++) if (NR >= 2 && NR == i) print $(i - 1) }' file.txt

测试输入:

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80

输出:

11
22
33
44
55
66
77
于 2012-07-27T00:44:04.207 回答
2

awk 'BEGIN {f=1} {print $f; f=f+1}' infile > outfile

于 2012-07-27T00:53:04.220 回答
1

另一种使用sedand的方法coreutils,假设空格分隔的输入位于infile

n=$(wc -l infile | cut -d' ' -f1)
for i in $(seq 1 $n); do
  sed -n "${i} {p; q}" infile | cut -d' ' -f$i
done
于 2012-07-27T00:55:10.413 回答